我正在编写一个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循环格式的名称(最后一部分可以在评论中回答)?如果这与其他问题有关,为什么这种格式有效?
答案 0 :(得分:2)
这只是创建closure
和immediately invoking function expression
。
onclick
事件将在未来的某个时间发生,但到那时循环已完成它的执行&amp; i
的值将更新为i<10
因此,在closure
和IIFE
的情况下,i
的值将被约束并保留在范围内。
另一种方法是使用let
代替var
for (let i = 0; i < 10; i++){
// rest of the code
}
let的范围始终是块级