带闭包的 for 循环保存状态
Posted
技术标签:
【中文标题】带闭包的 for 循环保存状态【英文标题】:For-loop saving state with closure 【发布时间】: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
我错过了什么?能否请您详细说明。
【问题讨论】:
函数之外的return
?我想知道这不是语法错误。
相关问题 - Why does a module level return statement work in Node.js?
【参考方案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 时,它会立即跳出循环。如果要返回所有值,则必须将它们放入容器中并返回容器。
【讨论】:
以上是关于带闭包的 for 循环保存状态的主要内容,如果未能解决你的问题,请参考以下文章