带有闭包的JavaScript for循环导致JSLint警告

时间:2018-04-19 16:50:11

标签: javascript function for-loop jslint jshint

我正在编写一个JavaScript脚本,它使用for循环将onclick事件分配给一系列按钮。要解决i范围的问题,我使用以下示例作为for循环的基础,基于this answer。我希望我知道这种创建for循环的方式的名称,如果有的话。

for (var i = 0; i < 10; i++) (function(i){
    //some code
})(i);

当我通过JSLint和JSHint运行我的代码时,它会发出警告说,“不要在循环中创建函数。”#34;参考如上构建的两个for循环。我所看到的有关此警告的问题不会使用我正在使用的格式的循环,因此我不知道它们如何应用于此。

为什么会发出此警告,并且有更好的方法吗?此外,是否有这个for循环格式的名称(最后一部分可以在评论中回答)?如果这与其他问题有关,为什么这种格式有效?

1 个答案:

答案 0 :(得分:2)

这只是创建closureimmediately invoking function expressiononclick事件将在未来的某个时间发生,但到那时循环已完成它的执行&amp; i的值将更新为i<10

的最后一个值

因此,在closureIIFE的情况下,i的值将被约束并保留在范围内。

另一种方法是使用let代替var

for (let i = 0; i < 10; i++){
  // rest of the code
}

let的范围始终是块级