for(i=0; i< 3; i++){
(function(i){
console.log(i)
})(i);
}
我遇到了这个,想知道它是如何工作(我理解的结果,只是想在(function(i){})(i)
和它叫什么一些深层次的解释。 感谢很多!JavaScript的奇怪行为需要解释
for(i=0; i< 3; i++){
(function(i){
console.log(i)
})(i);
}
我遇到了这个,想知道它是如何工作(我理解的结果,只是想在(function(i){})(i)
和它叫什么一些深层次的解释。 感谢很多!JavaScript的奇怪行为需要解释
的代码部分:
(function(i){
console.log(i)
})(i);
是什么被称为IIFE(立即调用的函数表达式) 。
这里重要的一点是,在JavaScript中,函数是第一类对象。为了详细说明这一点,我还可以做以下几点:
var log = function(i) {
console.log(i);
}
for(var i=0; i<3; i++){
log(i);
}
在这个例子中,我已经存储功能作为一个变量,然后再使用该函数调用操作()
回到称它为最初的例子,匿名函数周围的圆括号确实包含了我在日志变量中存储的内容。随后的括号然后调用在括号内创建的匿名函数。
(function(i){})(i)
这是一个self executing function这些自动评估内联返回一个值,这是一个很好的功能,它支付了解,你可以使用它们,但他们真的很好创建Javascript Modules范围和扩展代码。
*“这些内联自动评估以返回一个值。”*我不确定“返回值”的含义。 –
对于循环的每一次迭代,您都会创建并立即调用一个匿名函数,其值为i
在该特定迭代时的值。
请不要在没有传入任何参数的情况下工作,因为在调用函数时i
仍处于上下文中。
(function(i){
console.log(i)
})(i);
这就是所谓的自动执行匿名函数,或者您不必指定名称的函数。它在被定义后也立即执行。如果您查看第一组括号,则它们会包含函数关键字,参数列表和函数定义,而第二组括号则是您传递参数的地方。
/* self-executing anonymous function definition */
( function(i){
console.log(i)
}
)
/* pass argument i into the anonymous function and execute */
(i);
我用空格将它分开一点,这样就更容易将它在视觉上分解。
现在,由于函数参数和参数具有相同的名称,因此定义可能会让有人第一次看到此内容时感到困惑。因此,这里的同一个例子,但我们只是传递一个实际值到函数:
(function(i){
console.log(i) // prints '5'
})(5);
这是一个IIFE:http://benalman.com/news/2010/11/immediately-invoked-function-expression/ –
可能的重复[这是什么JavaScript代码段是什么意思?](http://stackoverflow.com/questions/6771406/what-does-this-javascript-snippet-mean) –
和[JavaScript中的匿名函数如何工作?](http://stackoverflow.com/q/1140089/218196) –