codecamp

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有简单的别名@

CoffeeScript模式
CoffeeScript扩展
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }