为什么要使用javascript函数包装器(添加在coffeescript中);。叫(这个)“;
当我使用最新(1.0)版本的coffee脚本时,一个简单的javascript输出如下(默认情况下):为什么要使用javascript函数包装器(添加在coffeescript中);。叫(这个)“;,javascript,coffeescript,Javascript,Coffeescript,当我使用最新(1.0)版本的coffee脚本时,一个简单的javascript输出如下(默认情况下): .call(this)做什么?添加它的原因是什么?它创建一个函数,然后使用父函数/对象范围调用自己 .call和.apply是调用函数的不同方法。您基本上创建了一个函数,它除了在自己的范围内设置a=1之外,什么都不做 在javascript中,您需要认识到每个函数都是一个对象,而这个是指当前的对象/函数。使用.call(this)覆盖函数中的this,并将其替换为调用上下文中的内容。这是确保编
.call(this)做什么?添加它的原因是什么?它创建一个函数,然后使用父函数/对象范围调用自己 .call和.apply是调用函数的不同方法。您基本上创建了一个函数,它除了在自己的范围内设置a=1之外,什么都不做
在javascript中,您需要认识到每个函数都是一个对象,而
这个是指当前的对象/函数。使用.call(this)
覆盖函数中的this
,并将其替换为调用上下文中的内容。这是确保编译的CoffeeScript具有自己的变量名范围的一种方法。这在效率和简单性方面有好处(您知道生成的JavaScript不会影响其他代码使用的变量)。您可以使用CoffeeScript编译器的--bare
(或-b
)选项禁用它
调用(this)
的原因只是为了确保CoffeeScript的this
范围与放置它的范围相同,因为函数通常不会从周围的上下文中继承它们的这个
对象。你能给我们看看生成这个js的代码吗?我猜这是使所有变量都具有局部函数(而不是全局函数)的最简单方法默认情况下是作用域,为了通过“this”访问父作用域,这是一篇关于命名JS主题的优秀文章:@Gabi Purcaru:这将由CoffeeScripta=1
生成。如果您想知道为什么使用.call(this)
而不是正常的IIFE调用,请参阅“为什么编写”.call(this)”javascript匿名函数的结尾:“这与自执行函数有何不同?比如:(function(){/*Code*/})();当自动执行函数没有在浏览器上下文中加载时,它就失去了这个
的概念。一些常见的JS平台使用特定的this
来评估加载的文件。我完全理解可变范围的原因,但我很想知道如何提高效率。您指的是编译器的效率,还是生成的JavaScript的效率?
(function() {
var a;
a = 1;
}).call(this);