Coffeescript转发了这个
a = 1
doStuff(a)
到这个
(function() {
var a;
a = 1;
doStuff(a);
}).call(this);
我知道你可以通过将代码包装在匿名函数中来避免声明全局变量
(function() {
var a;
a = 1;
doStuff(a);
})();
但最后一行的.call(this)
是什么?
为什么有必要?
答案 0 :(得分:2)
无论您是否要求CoffeeScript将您的代码包装在匿名函数包装器中,都要确保this
引用相同的内容。
对于“顶级”脚本this
引用浏览器中的全局对象 - window
- 就像在评估没有隐式或显式提供的this
对象的函数时一样。因此,在大多数情况下,显式提供的this
参数没有区别;但是你可能会以其他方式消耗编译的JavaScript输出,例如在非全局上下文中对其进行评估,因此包含它可以防止令人惊讶的行为更改。