Javascript迭代器设计模式

标签 javascript

我很困惑为什么下面的代码片段有 (i)最后:

for (var i = 0; i < 10; i += 1) {
  (function(i) { 
    setTimeout(function() {
      console.log(i);
    }, 1000);
  })(i);
}  

我在我工作过的生产代码中看到过它——我只是凭直觉知道为什么它是必要的。

最佳答案

您正在定义一个内联函数,因此您可以在执行 console.log 语句时强制 i 参数位于本地范围内。通过添加参数,您将创建一个自执行函数。类似的还有下面的语句,读起来可能会更好......

function logmeWithTimeOut(value) {
    setTimeout(function() { console.log(value); }, 1000);
}

for (var i = 0; i < 10; i++) {
    logmeWithTimeout(i);
}

虽然我可能更喜欢

function logmeWithTimeout(value) {
     console.log(value);
}

for (var i = 0; i < 10; i++) {
    setTimeout(logmeWithTimeout.bind(undefined, i), 1000);
}

它强制 i 在本地范围内,否则你的日志将只打印 11

关于Javascript迭代器设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30088672/

相关文章:

javascript - 更改 $scope 变量不更新 View

javascript - 对回调感到困惑

javascript - toFixed 方法不适用于用户输入,但适用于 javascript 中的其他变量,包括代码片段

javascript - 如何获取表格单元格内的值?

javascript - AngularJS 重定向闪烁以前的模板

javascript - 使用带有 trNgGrid 问题的 Angular 路由器 ui

javascript - 解决javascript中的算术字符串?

javascript - 如何使用 JavaScript 通过类名仅获取一个元素?

javascript - d3 Node 工具提示值多行

javascript - “Removing”来自对象的多个属性,无突变