看下面的代码

//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);


重要的是要注意,尽管变量具有相同的名称,但它们是不同的变量。即内部变量遮盖了外部变量,从而“固定”了该值。

09-16 20:37