为什么使用JavaScript函数包装器(在Coffeescript中添加)“ .call(this)”
-
13-10-2019 - |
题
当我使用最新的咖啡订阅版本(1.0)时,简单的JavaScript输出看起来像这样(默认情况下):
(function() {
var a;
a = 1;
}).call(this);
有什么 .CALL(this) 这样做是什么原因呢?
解决方案
它正在创建一个函数,然后使用父函数/对象范围来调用自己。
.CALL和.APPLY是调用函数的不同方法。您基本上创建了一个函数,除了在其自己的范围内设置a = 1之外,该函数什么都不做。
在JavaScript中,您需要意识到每个功能都是对象,并且 this
是指当前对象/函数的原因。使用 .call(this)
覆盖 this
从函数内部从呼叫上下文中替换为函数。
其他提示
这是确保编译的CoffeeScript具有自己的可变名称范围的一种方法。这在效率和简单性方面具有好处(您知道生成的JavaScript不会在其他代码使用的变量上踩踏)。您可以将其禁用 --bare
(或者 -b
)咖啡报编译器的选项。
原因 call(this)
只是为了确保咖啡本具有相同的 this
作为放置的范围,因为函数通常不会继承其 this
来自周围环境的对象。
不隶属于 StackOverflow