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

Apa*_*ear 6 javascript closures for-loop node.js

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

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

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

意思是,它应该吐出来

>>node file.js
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这不是这样做的.而是当它在终端中运行时,它会吐出来

>>node file.js
1
Run Code Online (Sandbox Code Playgroud)

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

the*_*eye 7

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

return (function(e){
    console.log(e)
})(i);
Run Code Online (Sandbox Code Playgroud)

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

(function(e){
    console.log(e)
})(i);
Run Code Online (Sandbox Code Playgroud)

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