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

IT技术 javascript coffeescript
2021-01-22 02:26:03

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

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

什么.CALL(本)做,哪些是添加它的原因是什么?

2个回答

这是一种确保编译后的 CoffeeScript 有自己的变量名作用域的方法。这在效率和简单性方面有好处(您知道生成的 JavaScript 不会踩踏其他代码使用的变量)。您可以使用CoffeeScript 编译器--bare(或-b) 选项禁用它

的原因call(this)只是为了确保 CoffeeScript 与this放置它的作用域相同,因为函数通常不会this从周围的上下文中继承它们的对象。

我完全理解可变范围的原因,但我很想知道如何提高效率。你指的是编译器的效率,还是生成的 JavaScript 的效率?
2021-03-25 02:26:03
这与 self exec 函数有何不同?喜欢: (function() { /* 代码 */ })();
2021-04-05 02:26:03
当自执行函数没有this在浏览器上下文中加载时,它就失去了它的概念一些 CommonJS 平台使用特定的this.
2021-04-08 02:26:03

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

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

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