CoffeeScript闭包
在js中,普遍会使用闭包实现各种事件的handler或封装模块,以下是CoffeeScript对这一普遍模式的实现
closure = do ->
_private = "foo"
-> _private
console.log(closure()) #=> "foo"
do关键词可以产生一个Immediate Function,下面是对应js代码
var closure;
closure = (function() {
var _private;
_private = "foo";
return function() {
return _private;
};
})();
闭包中经常需要绑定this的值给闭包的私有变量,CoffeeScript使用特殊的=>语法省去了这个麻烦
@clickHandler = -> alert "clicked"
element.addEventListener "click", (e) => @clickHandler(e)
使用=>生成函数,可以看到生成代码中会加上对this的绑定
var _this = this;
this.clickHandler = function() {
return alert("clicked");
};
element.addEventListener("click", function(e) {
return _this.clickHandler(e);
});
这里CoffeeScript对于this有简单的别名@
更多建议: