我试图更好地理解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]();
}
Run Code Online (Sandbox Code Playgroud)
该阵列funcs具有推回调功能.我不是为什么在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]();
}
Run Code Online (Sandbox Code Playgroud)
正如所料,有3三个功能.
我的问题是:如何funcs[j]()调用funcs.push(...)函数?我理解funcs[j]是引用数组的j元素funcs.但为什么有括号()会调用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]() 调用作为数组中第一个值的函数。
| 归档时间: |
|
| 查看次数: |
7477 次 |
| 最近记录: |