我试图更好地理解JavaScript。以下是我从JavaScript function closures读取的一段代码。
var funcs = [];
// create a bunch of functions
for (var i = 0; i < 3; i++) {
funcs.push(function() {
console.log(i);
})
}
// call them
for (var j = 0; j < 3; j++) {
funcs[j]();
}
数组funcs
具有推送回调函数。我不知道为什么在J
循环中,funcs[j]()
会调用此函数在控制台中打印i
。
我试图通过添加一些控制台消息来理解这个序列:
var funcs = [];
console.log("start");
for (var i = 0; i < 3; i++) {
console.log("i:" + i);
funcs.push(function(){
console.log(i);
})
}
console.log("J loop");
for (var j=0; j<3; j++) {
console.log("j:" + j);
funcs[j]();
}
正如所料,所有三个功能都有3
。
我的问题是:funcs[j]()
如何调用funcs.push(...)
函数?
我知道funcs[j]
引用了j
数组的funcs
元素。但是为什么括号()
会调用push(...)
函数?
答案 0 :(得分:4)
function() {console.log(i);}
是一个表达式,其值为记录i
的函数值。
funcs.push
是一个为数组添加值的函数。
在函数之后放置()
将调用该函数。
funcs.push(some_value)
调用push
函数并将some_value
作为要放入数组的值。
funcs.push(function() {console.log(i);})
将函数添加到数组中。
funcs[0]
的值成为该函数。
在函数之后放置()
将调用该函数。
funcs[0]()
调用数组中第一个值的函数。
答案 1 :(得分:-1)
首先,'i'变量是全局的,并且结束循环,i = 3 然后,funcs中的函数使用变量“i”,然后,所有函数在控制台中打印“3”。
也许你想这样做:
@interface