以下代码可完美运行,大括号后的(i)
是
for (var i = 0; i < 5; i++) {
setTimeout(function(j) {
console.log(j);
}(i), 1000);
}
这是在匿名函数中传递参数值的方法吗?
答案 0 :(得分:1)
setTimeout
的第一个参数是一个接受一个参数的函数表达式。 i
为该参数提供值,(i)
调用值为i
的函数表达式。
原因是因为您不能直接在i
的回调中使用setTimeout
,因为setTimeout
的异步特性和{{1}的同步特性会导致不必要的行为}循环。
使用函数表达式处理这种情况可确保将for
的值绑定到i
,从而正确产生所需的输出。
答案 1 :(得分:1)
这将创建立即执行的函数表达式(),JavaScript引擎将通过该表达式直接解释该函数。
答案 2 :(得分:1)
让我们来考虑这种情况:
function fn(j) { // function declaration
console.log(j);
}
fn(j); // function call
调用该函数。现在,函数也可以是表达式,它们可以求值到引用,并且可以通过在引用之后添加()
来调用该函数,就像上面一样。这意味着
function(j){ /*..*/ }(i)
实际上无需等待即可直接调用该函数。