簡體   English   中英

帶回調函數的Javascript數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM