当我使用最新的(1.0)咖啡脚本时,一个简单的javascript输出看起来像这样(默认情况下):
(function() {
var a;
a = 1;
}).call(this);
.call(this)做什么以及添加它的原因是什么?
答案 0 :(得分:33)
这是确保已编译的CoffeeScript具有自己的变量名称范围的方法。这在效率和简单性方面具有优势(您知道生成的JavaScript不会踩踏其他代码使用的变量)。您可以使用CoffeeScript编译器的--bare
(或-b
)选项将其禁用。
call(this)
的原因只是为了确保CoffeeScript与放置它的范围具有相同的this
,因为函数通常不会继承它们的this
对象。周围环境。
答案 1 :(得分:15)
它正在创建一个函数,然后使用父函数/对象范围调用自身。
.call和.apply是调用函数的不同方法。你基本上创建了一个除了在自己的范围内设置a = 1之外什么都不做的函数。
在javascript中你需要意识到每个函数都是一个对象,而this
是指当前对象/函数。使用.call(this)
覆盖函数中的this
,并将其替换为调用上下文中的{。}}。