为什么coffeescript转换器使用'call'调用包装函数?

时间:2014-11-05 07:57:17

标签: coffeescript

Coffeescript转发了这个

a = 1
doStuff(a)

到这个

(function() {
  var a;    
  a = 1;    
  doStuff(a);    
}).call(this);

我知道你可以通过将代码包装在匿名函数中来避免声明全局变量

(function() {
  var a;    
  a = 1;    
  doStuff(a);    
})();

但最后一行的.call(this)是什么? 为什么有必要?

1 个答案:

答案 0 :(得分:2)

无论您是否要求CoffeeScript将您的代码包装在匿名函数包装器中,都要确保this引用相同的内容。

对于“顶级”脚本this引用浏览器中的全局对象 - window - 就像在评估没有隐式或显式提供的this对象的函数时一样。因此,在大多数情况下,显式提供的this参数没有区别;但是你可能会以其他方式消耗编译的JavaScript输出,例如在非全局上下文中对其进行评估,因此包含它可以防止令人惊讶的行为更改。