2

看看下面的代码

//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 按钮上添加点击处理程序。

4

2 回答 2

4

发生这种情况是因为在调用内部函数时(在循环完成之后),值i将是btns.length,因此值btns[i]将是undefined

您需要关闭i这样的值:

b.handler = function(i) {
    return function() {
        var a = btns[i].some_field;
    }
}(i);

需要注意的是,虽然变量名称相同,但它们是不同的变量;即内部变量遮蔽外部,从而“固定”该值。

于 2013-08-12T07:42:53.810 回答
0
for(var i = 0, b; b = btns[i]; i++) {
  b.handler = function () {
    var a = this.btns[i].some_field; 
    //the same for "b.some_field;"
  };
}

给“这个”。在函数中我们必须使用“this”来指向

于 2013-08-12T07:38:18.763 回答