2

我有以下代码:

for (i = 0; i < 5; i++) {
    this.hands[0].cards[i].img.on('mousedown', (function (i) {
        var j = i;
        return function (event) {
            self.hands[0].cards[j].holdCard();
        };
    })(i));
}

这可以满足我的需求,但 JSHint 抱怨:

[L1164:C10] W083:不要在循环中创建函数。

我怎样才能通过不同的方式重写这个让 JSHint 开心呢?

4

1 回答 1

7

您可以用循环外的单独函数替换 IIFE:

function createHandler(j, self) {
    return function (event) {
        self.hands[0].cards[j].holdCard();
    };
}
for (i = 0; i < 5; i++) {
    this.hands[0].cards[i].img.on('mousedown', createHandler(i, this));
}

有用的参考:JSLint 错误说明(感谢 user1671639 的链接)。

于 2013-09-10T13:34:19.093 回答