Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么要使用javascript函数包装器(添加在coffeescript中);。叫(这个)“;_Javascript_Coffeescript - Fatal编程技术网

为什么要使用javascript函数包装器(添加在coffeescript中);。叫(这个)“;

为什么要使用javascript函数包装器(添加在coffeescript中);。叫(这个)“;,javascript,coffeescript,Javascript,Coffeescript,当我使用最新(1.0)版本的coffee脚本时,一个简单的javascript输出如下(默认情况下): .call(this)做什么?添加它的原因是什么?它创建一个函数,然后使用父函数/对象范围调用自己 .call和.apply是调用函数的不同方法。您基本上创建了一个函数,它除了在自己的范围内设置a=1之外,什么都不做 在javascript中,您需要认识到每个函数都是一个对象,而这个是指当前的对象/函数。使用.call(this)覆盖函数中的this,并将其替换为调用上下文中的内容。这是确保编

当我使用最新(1.0)版本的coffee脚本时,一个简单的javascript输出如下(默认情况下):


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

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

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


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

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


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

你能给我们看看生成这个js的代码吗?我猜这是使所有变量都具有局部函数(而不是全局函数)的最简单方法默认情况下是作用域,为了通过“this”访问父作用域,这是一篇关于命名JS主题的优秀文章:@Gabi Purcaru:这将由CoffeeScript
a=1
生成。如果您想知道为什么使用
.call(this)
而不是正常的IIFE调用,请参阅“为什么编写”.call(this)”javascript匿名函数的结尾:“这与自执行函数有何不同?比如:(function(){/*Code*/})();当自动执行函数没有在浏览器上下文中加载时,它就失去了这个
的概念。一些常见的JS平台使用特定的
this
来评估加载的文件。我完全理解可变范围的原因,但我很想知道如何提高效率。您指的是编译器的效率,还是生成的JavaScript的效率?
(function() {
  var a;
  a = 1;
}).call(this);