带回调函数的Javascript数组

前端之家收集整理的这篇文章主要介绍了带回调函数的Javascript数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图更好地理解JavaScript.这是我从JavaScript function closures读到的一段代码.

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 [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]()调用函数,该函数是数组中的第一个值.

猜你在找的JavaScript相关文章