带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 

由于某种原因,这不是这样做的。 而当它在terminal运行,它吐出来

 >>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声明的作品? 想想看,它不在function里面。 那么在技术上它是一个错误,对吧? ;-)我在这个问题中详细解释了这一点。

当你致电退货时,它会立即跳出循环。 如果你想返回所有的值,你将不得不把它们放在一个容器中,并返回容器。