带闭包的 For 循环保存状态
For-loop saving state with closure
如果这可能有点新手问题,请原谅我,但这应该可行,不是吗?
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 立即由 IIFE 编辑 return 值,所以在此语句中
return (function(e){
console.log(e)
})(i);
由于 IIFE 只打印 0
而没有显式显示 return 任何内容,因此 JavaScript 将默认 return undefined
并立即退出。要解决此问题,只需删除 return
关键字,
(function(e){
console.log(e)
})(i);
PS: 你有没有想过,为什么上面代码中的 return
语句有效?想一想,它不在函数内部。那么从技术上讲它是一个错误,对吧? ;-) 我在 .
中详细解释了这一点
当你调用return时,它会立即跳出循环。如果要 return 所有值,则必须将它们放入一个容器中,然后 return 容器。
如果这可能有点新手问题,请原谅我,但这应该可行,不是吗?
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 立即由 IIFE 编辑 return 值,所以在此语句中
return (function(e){
console.log(e)
})(i);
由于 IIFE 只打印 0
而没有显式显示 return 任何内容,因此 JavaScript 将默认 return undefined
并立即退出。要解决此问题,只需删除 return
关键字,
(function(e){
console.log(e)
})(i);
PS: 你有没有想过,为什么上面代码中的 return
语句有效?想一想,它不在函数内部。那么从技术上讲它是一个错误,对吧? ;-) 我在
当你调用return时,它会立即跳出循环。如果要 return 所有值,则必须将它们放入一个容器中,然后 return 容器。