我尝试更好地理解JavaScript。这里是我从JavaScript函数闭包中阅读到的一段代码。
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]
是引用了 funcs
数组的第 j
个元素。但是为什么加上括号 ()
就能够调用 push(...)
函数呢?
.push()
函数;它调用传递给.push()
的函数,即带有console.log(i);
的小函数。 - Pointy.push()
的函数?这是语法还是其他什么东西? - Shaohaoi
的值可能会让你感到惊讶:https://dev59.com/v3RB5IYBdhLWcg3wAjNH - T.J. Crowder