为什么使用JavaScript函数包装器(在Coffeescript中添加)“ .call(this)”

StackOverflow https://stackoverflow.com/questions/4542942

  •  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 来自周围环境的对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top