摘要: coffeescript中所有变量默认为局部变量,也就是说任何函数内部的非闭包变量赋值都将在函数头部产生该变量的var声明。非闭包变量指的是:该变量没有在包裹该函数的外部函数和模块中声明过。因此,如果想避免在函数内部的var声明,使变量赋值具有模块级的效果,可以在模块头部增加对该变量的赋值,这样该变量将只在模块头部,而不再在函数头部产生var声明。如果在函数内部希望屏蔽外部的声明怎么办?借助回引号标记法产生原始js代码。示例:x = 0f = () -> `var x` #如无此行,下一赋值直接修改外部的x x = 1f()console.log x #如果没有`var x`则显示0,否 阅读全文
posted @ 2013-08-16 10:48 Simeon Chaos 阅读(216) 评论(0) 推荐(0)
摘要: 有的情况下,我们更加关注同一方法在不同类中的关系和区别,花费更多时间基于相同的方法比较和查看它们在不同类中的代码。但是由于语言的限制,这些代码散落在程序的不同位置,或者是不同的文件之中,因此很不方便。当我在编写解释器/求值器/编译器时,明显感到了这方面的的不便。当前很少有语言支持这种需求。而coffeescript则在这方面有上佳表现。以下是我写的一个程序,演示了这种想法。# 一个求值器,基于后续传递风格的代码(CPS),可以发展成一个支持lisp/函数式风格的语言,具有内置的call/cc, 解析器,和逻辑语言等特性。_ = require('underscore')dao 阅读全文
posted @ 2013-05-11 18:00 Simeon Chaos 阅读(208) 评论(0) 推荐(0)
摘要: 在coffescript中定义类的时候,忘记在constructor后面加冒号,悲剧地浪费了我近半小时的调试时间。太杯具了!!!下面就是这一段可耻的代码,拉出去砍了!class Exprclass exports.Unify extends Expr constructor: (@x, @y) ->居然是没有报告编译错误。它是合法的。啊啊啊啊。 阅读全文
posted @ 2013-05-05 17:39 Simeon Chaos 阅读(105) 评论(0) 推荐(0)
摘要: 在javascript中,如果我们希望将某个函数用作构造函数,那么,在这个函数中最好不要用任何return语句。系统将自动返回this,作为产生的新对象。这一习惯在coffeescript中可能产生问题。在coffeescript中,如果希望将某个函数用作构造函数,也就是说,希望用new MyClass(...)的方式产生对象,记得最后一条语句应该是return this. 否则,因为coffescript总是会返回最后一条语句的值,那么你得到的可能不是你希望的MyClass的实例。当然,因为coffeescript提供了class关键字直接定义类,你在用class语句定义类的时候,在其中的c 阅读全文
posted @ 2013-05-05 08:28 Simeon Chaos 阅读(216) 评论(0) 推荐(0)
摘要: javascript 与 coffescript 变身。javascript转换为coffeescript。coffeescript转换为javascript。移形换位,乾坤挪移。 阅读全文
posted @ 2013-05-04 11:15 Simeon Chaos 阅读(612) 评论(0) 推荐(0)
摘要: 以下选项是哪个二?1. 2 2. 33. 44. 1 阅读全文
posted @ 2013-05-04 11:15 Simeon Chaos 阅读(297) 评论(0) 推荐(0)
摘要: 前年,我编写了daot的解释执行版,发布在pypi,为0.7.4版。去年下半年,为了提升速度,我基本上完成了daot编译成python语言的代码。还有一点点没有完成,也没有正式发布。编译版的daot和coffeescript有类似之处。不过,daot是用python编写的,并且产生的是python代码。而coffeescript是用javascript编写的,产生的是javascript。daot内置了一个强大的参数化解析器,用它可以方便地生成任意的高级语言。当然,daot没有做完整......。同时,python不象javascript那样让人痛苦。所以,在daot充分地展示其内置的参数化解 阅读全文
posted @ 2013-05-04 11:15 Simeon Chaos 阅读(278) 评论(0) 推荐(0)
摘要: 在webstorm6中也可以调试coffeescript。要不要借助 source map呢? 阅读全文
posted @ 2013-05-04 11:14 Simeon Chaos 阅读(368) 评论(0) 推荐(0)
摘要: coffee> for k, v in {a:1, b:2} then console.log(k,v)[]coffee> for k, v of {a:1, b:2} then console.log(k,v)a 1b 2[ undefined, undefined ]coffee> for k, v of [1,2] then console.log(k,v)0 11 2[ undefined, undefined ]coffee> for k, v in [1,2] then console.log(k,v)1 02 1[ undefined, undefined 阅读全文
posted @ 2013-05-04 08:23 Simeon Chaos 阅读(250) 评论(0) 推荐(0)
摘要: for ( ... ) { var v; ... v = ... ; xxx.click(function() { ... var a = v; // v 是引用,因此事件函数实际执行的时候v总是用的循环结束后的最后一个值。 ... });}for ( ... ) { var v; ... v = ... ; xxx.click(function(v){ return function() { ... var a = v; ... })} (v); //通过这个立即的函数调用,事件... 阅读全文
posted @ 2013-05-03 09:27 Simeon Chaos 阅读(151) 评论(0) 推荐(0)