繁体   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