带有回调函数的Javascript数组

带有回调函数的Javascript数组,javascript,Javascript,我试图更好地理解JavaScript。这是我读到的一段代码 正如所料,这三个功能都有3。 我的问题是:funcs[j]()如何调用funcs.push(…)函数? 我知道funcs[j]是funcs数组的j元素的引用。但是为什么用括号()会调用推送(…)函数呢?函数(){console.log(i);}是一个表达式,它的计算值是记录i的函数 funcs.push是一个向数组添加值的函数 将()放在函数后面将调用该函数 funcs.push(some_值)调用push函数,并将some_值作为值传

我试图更好地理解JavaScript。这是我读到的一段代码

正如所料,这三个功能都有
3

我的问题是:
funcs[j]()
如何调用
funcs.push(…)
函数? 我知道
funcs[j]
funcs
数组的
j
元素的引用。但是为什么用括号
()
会调用
推送(…)
函数呢?

函数(){console.log(i);}
是一个表达式,它的计算值是记录
i
的函数

funcs.push
是一个向数组添加值的函数

()
放在函数后面将调用该函数

funcs.push(some_值)
调用
push
函数,并将
some_值
作为值传递到数组中

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);
}
var funcs=[];
控制台日志(“启动”);
对于(变量i=0;i<3;i++){
控制台日志(“i:+i”);
功能推送(功能(i){
控制台日志(i);
})
}
console.log(“J循环”);

对于(var j=0;jIt不调用
.push()
函数;它调用传递给
.push()
的函数,这是一个内部带有
console.log(i);
的小函数。@Pointy您能再解释一点吗?这就是我感到困惑的地方。它为什么调用传递给
.push()的函数
?这是一种语法或其他东西。在数组末尾按add元素。在第一个循环中,您将函数推送到数组中。在第二个循环中,您将使用()[]调用函数指示索引。可能除了让您感到困惑之外,上面的代码还有一个问题,
i
的值可能会让您感到惊讶:感谢您的逐步解释!这非常有用!因此将
()
放在函数之后将始终调用
推送()
中的任何函数
在函数之后将调用该函数。将它放在表示被推入数组中的函数的某个对象之后将调用该函数。感谢您的回答,但我没有问题理解为什么它会打印三次
3
。我只是对为什么
()
将调用
console.log(i)
函数,@Quentin做了大量的解释。
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]();
}
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);
}