javascript - 带闭包的 For 循环保存状态

标签 javascript node.js for-loop closures

如果这可能是一个新手问题,请原谅我,但这应该可行,不是吗?

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

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

最佳答案

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

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

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

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

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

关于javascript - 带闭包的 For 循环保存状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28953795/

相关文章:

php - 使用 for 循环和 sql COUNT 遍历 div

r - 如何加速这种双 for 循环?

python - 如何迭代 json 值并比较所有 json 值并返回 true?

javascript - 如何从在 NestJS CQRS 的传奇中失败的后续命令引发 HTTP 异常?

Javascript - 选择 - 识别文本节点

node.js - 在nodejs中从stdin读取的正确方法

node.js - NODE JS - 在建立安全 TLS 连接之前客户端网络套接字断开连接

JavaScript - 获取 contentEditable div 中当前行的 HTML

javascript - Mongoose 异步多次保存冲突

node.js - 带回调和不带回调的 collection.find 有什么区别?