具有闭合功能的 For 循环保存状态

For-loop saving state with closure

本文关键字:For 循环 保存 状态 功能      更新时间:2023-09-26

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

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语句有效?想想看,它不在函数内部。那么从技术上讲这是一个错误,对吧?;-)我在这个问题中详细解释了这一点。

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