为什么要使用javascript函数包装器(在coffeescript中添加)“。call(this)”

时间:2010-12-28 00:49:28

标签: javascript coffeescript

当我使用最新的(1.0)咖啡脚本时,一个简单的javascript输出看起来像这样(默认情况下):

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

.call(this)做什么以及添加它的原因是什么?

2 个答案:

答案 0 :(得分:33)

这是确保已编译的CoffeeScript具有自己的变量名称范围的方法。这在效率和简单性方面具有优势(您知道生成的JavaScript不会踩踏其他代码使用的变量)。您可以使用CoffeeScript编译器的--bare(或-b)选项将其禁用。

call(this)的原因只是为了确保CoffeeScript与放置它的范围具有相同的this,因为函数通常不会继承它们的this对象。周围环境。

答案 1 :(得分:15)

它正在创建一个函数,然后使用父函数/对象范围调用自身。

.call和.apply是调用函数的不同方法。你基本上创建了一个除了在自己的范围内设置a = 1之外什么都不做的函数。

在javascript中你需要意识到每个函数都是一个对象,而this是指当前对象/函数。使用.call(this)覆盖函数中的this,并将其替换为调用上下文中的{。}}。