【问题标题】:For-loop saving state with closure带闭包的 for 循环保存状态
【发布时间】:2015-05-11 07:19:22
【问题描述】:

如果这可能是一个菜鸟问题,请原谅我,但这应该有效,不是吗?

var elems = [1,2,3,4,5]

for (var i = 0; i <elems.length; i++) {
    return (function(e){
        console.log(e)
    })(i);
}

意思是应该吐出来

>>node file.js
1
2
3
4
5

由于某种原因,这不是这样做的。相反,当它在终端中运行时,它会吐出

>>node file.js
1

我错过了什么?能否请您详细说明。

【问题讨论】:

标签: javascript node.js for-loop closures


【解决方案1】:

因为你是在这个语句中立即返回 IIFE 返回的值

return (function(e){
    console.log(e)
})(i);

由于 IIFE 只打印 0 并且没有显式返回任何内容,JavaScript 将默认返回 undefined 并立即退出。要解决此问题,只需删除 return 关键字,

(function(e){
    console.log(e)
})(i);

PS:你有没有想过,为什么上面代码中的return 语句有效?想一想,它不在函数内部。那么从技术上讲,它是一个错误,对吧? ;-) 我在question 中详细解释了这一点。

【讨论】:

    【解决方案2】:

    当你调用 return 时,它会立即跳出循环。如果要返回所有值,则必须将它们放入容器中并返回容器。

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 2012-12-15
      • 1970-01-01
      • 2011-01-12
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多