[英]Javascript array with callback function
我試圖更好地理解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
具有push回調函數。 我不知道為什么在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.push(...)
funcs[j]()
調用funcs.push(...)
函數? 我理解funcs[j]
是引用funcs
數組的j
元素。 但是為什么有括號()
會調用push(...)
函數?
function() {console.log(i);}
是一個表達式,它計算的值是記錄i
函數。
funcs.push
是一個向數組添加值的函數。
在函數之后放置()
將調用該函數。
funcs.push(some_value)
調用push
函數並傳遞some_value
作為要放入數組的值。
funcs.push(function() {console.log(i);})
將函數添加到數組中。
funcs[0]
的值成為該函數。
在函數之后放置()
將調用該函數。
funcs[0]()
調用函數,該函數是數組中的第一個值。
首先,'i'變量是全局的,並且結束循環,i = 3然后,funcs中的函數使用變量“i”,然后,所有函數在控制台中打印“3”。
也許你想這樣做:
var funcs = [];
console.log("start");
for (var i = 0; i < 3; i++) {
console.log("i:" + i);
funcs.push(function(i){
console.log(i);
})
}
console.log("J loop");
for (var j=0; j<3; j++) {
console.log("j:" + j);
funcs[j](j);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.