具有闭包的For循环保存状态

时间:2015-03-09 23:47:28

标签: javascript node.js for-loop closures

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

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

我错过了什么?你能详细说明吗。

2 个答案:

答案 0 :(得分:7)

因为您在此声明中立即返回IIFE返回的值

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

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

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

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

答案 1 :(得分:2)

当您调用返回时,它将立即突破循环。如果要返回所有值,则必须将它们放入容器中并返回容器。