for(i=0; i< 3; i++){
(function(i){
console.log(i)
})(i);
}
我遇到了这个并且想知道它是如何工作的(我理解结果,只是想对(function(i){})(i)
及其所谓的更深入的解释。
非常感谢!!!
答案 0 :(得分:1)
(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);
答案 1 :(得分:1)
代码部分:
(function(i){
console.log(i)
})(i);
是所谓的IIFE(立即调用的函数表达式)。
这里重要的一点是,在JavaScript中,函数是第一类对象。为了详细阐述这一点,我也可以做到以下几点:
var log = function(i) {
console.log(i);
}
for(var i=0; i<3; i++){
log(i);
}
在这个例子中,我将函数存储为变量,然后使用函数调用操作符()
回到原始示例,匿名函数周围的括号实际上包含了我在日志变量中存储的内容。然后,尾随括号将调用在括号内创建的匿名函数。
答案 2 :(得分:0)
(function(i){})(i)
这是self executing function。这些内容会自动评估为返回值。这是Javascript的一个很好的功能,它需要了解。您可以通过这种方式使用它们,但它们非常适合创建范围和扩展代码的Javascript Modules。
答案 3 :(得分:0)
对于循环的每次迭代,您都要创建并立即调用一个匿名函数,该函数具有i
在特定迭代时的值。
请注意,如果没有传递任何参数,这将有效,因为当您调用函数时i
仍处于上下文中。