看下面的代码
//btns is an array passed as a parameter to a function
for(var i = 0, b; b = btns[i]; i++) {
b.handler = function () {
var a = btns[i].some_field; //undefined
//the same for "b.some_field;"
};
}
为什么
btns[i]
是未定义的?PS。如果重要的话,代码会在extjs按钮上添加点击处理程序。
最佳答案
发生这种情况的原因是,在调用内部函数时(在循环完成之后),i
的值将为btns.length
,因此btns[i]
的值将为undefined
。
您需要像这样关闭i
的值:
b.handler = function(i) {
return function() {
var a = btns[i].some_field;
}
}(i);
重要的是要注意,尽管变量具有相同的名称,但它们是不同的变量。即内部变量遮盖了外部变量,从而“固定”了该值。