在JavaScript中,变量i没有传递到循环中的函数中
我理解var I不存在块级范围;但是,在下面的代码中,d.push();是在i的初始化之后执行的,为什么我在这里没有定义在JavaScript中,变量i没有传递到循环中的函数中,javascript,Javascript,我理解var I不存在块级范围;但是,在下面的代码中,d.push();是在i的初始化之后执行的,为什么我在这里没有定义 var d = []; for (var i = 0; i < 3; i++) { d.push(function(i) { console.log('iterator: ' + i); }); } d[0]();//undefined var d=[]; 对于(变量i=0;i
var d = [];
for (var i = 0; i < 3; i++) {
d.push(function(i) {
console.log('iterator: ' + i);
});
}
d[0]();//undefined
var d=[];
对于(变量i=0;i<3;i++){
d、 推送(功能(一){
log('iterator:'+i);
});
}
d[0]()//未定义
您可以使用推送匿名函数的参数绑定版本,从而确保第一个参数的值
var d = [];
for (var i = 0; i < 3; i++) {
d.push((function(i) {
console.log('iterator: ' + i);
}).bind(this, i));
}
d[0](); // iterator: 0
d[1](); // iterator: 1
d[2](); // iterator: 2
var d=[];
对于(变量i=0;i<3;i++){
d、 推动(功能(i){
log('iterator:'+i);
}).绑定(这个,我));
}
d[0]();//迭代器:0
d[1]();//迭代器:1
d[2]();//迭代器:2
以下是我的解决方案:
var d = [];
function newFunction(i) {
var k = i;
return function() {
console.log('iterator: ' + k);
}
}
for (var i = 0; i < 3; i++) {
d.push(
newFunction(i)
);
}
d[0]();
d[1]();
var d=[];
函数newFunction(i){
var k=i;
返回函数(){
log('iterator:'+k);
}
}
对于(变量i=0;i<3;i++){
d、 推(
新功能(一)
);
}
d[0]();
d[1]();
这是因为当您创建新函数时,它会创建一个变量范围,该范围不会随for循环而改变。它在每次迭代时保存
i
的状态,这样当您再次调用它们时,它将与最初声明的i
一起运行。您推了一个异常函数函数(i){console.log('iterator:'+i);}
,该函数有一个参数i
。但是当你调用函数时,d[0]()代码>,您没有传递任何参数。