JavaScript 关闭导致 JSLint 警告的 For 循环
JavaScript For Loop with Closure Causing JSLint Warning
我正在编写一个 JavaScript 脚本,它使用 for 循环将 onclick
事件分配给一系列按钮。为了解决 i
范围的问题,我使用以下示例作为我的 for 循环的基础,基于 this answer。我希望我知道这种创建 for 循环的方法的名称,如果有的话。
for (var i = 0; i < 10; i++) (function(i){
//some code
})(i);
当我 运行 我的代码通过 JSLint 和 JSHint 时,它会发出警告说,"Don't make functions within a loop." 指的是像上面那样构建的两个 for 循环。我看到的有关此警告的问题没有在我使用的格式中使用循环,所以我不知道它们如何适用于此。
为什么会出现这个警告,还有比这更好的方法吗?另外,这种 for 循环格式是否有名称(最后一部分可以在评论中回答)?如果这与其他问题有关,为什么这种格式有效?
这只是创建一个 closure
和 immediately invoking function expression
。
onclick
事件将在未来某个时间发生,但到那时循环已完成执行并且 i
的值将更新为 i<10
[=21= 的最后一个值]
所以在这种情况下 closure
和 IIFE
i
的值将被绑定并保留在范围内。
另一种方法是使用 let
而不是 var
for (let i = 0; i < 10; i++){
// rest of the code
}
let 的范围总是在块级别
我正在编写一个 JavaScript 脚本,它使用 for 循环将 onclick
事件分配给一系列按钮。为了解决 i
范围的问题,我使用以下示例作为我的 for 循环的基础,基于 this answer。我希望我知道这种创建 for 循环的方法的名称,如果有的话。
for (var i = 0; i < 10; i++) (function(i){
//some code
})(i);
当我 运行 我的代码通过 JSLint 和 JSHint 时,它会发出警告说,"Don't make functions within a loop." 指的是像上面那样构建的两个 for 循环。我看到的有关此警告的问题没有在我使用的格式中使用循环,所以我不知道它们如何适用于此。
为什么会出现这个警告,还有比这更好的方法吗?另外,这种 for 循环格式是否有名称(最后一部分可以在评论中回答)?如果这与其他问题有关,为什么这种格式有效?
这只是创建一个 closure
和 immediately invoking function expression
。
onclick
事件将在未来某个时间发生,但到那时循环已完成执行并且 i
的值将更新为 i<10
[=21= 的最后一个值]
所以在这种情况下 closure
和 IIFE
i
的值将被绑定并保留在范围内。
另一种方法是使用 let
而不是 var
for (let i = 0; i < 10; i++){
// rest of the code
}
let 的范围总是在块级别