【发布时间】:2019-10-25 23:55:23
【问题描述】:
我正在学习 JavaScript。我写了这段代码来学习地图功能。但是后来我很困惑为什么这不是连续映射它,因为每个映射序列都有一个新元素被推送到数组中。它不应该在映射时继续推动新元素吗? 为什么map函数只对原来的三个元素运行,对新推送的元素不运行?
我尝试在节点环境中调试它,arr 变量进入了一个闭包。我知道什么是闭包,但我无法理解这里发生了什么。
let array = [1, 2, 3];
array.map((element) => {
array.push(10);
console.log(element);
});
我希望输出应该是1,2,3,10,10,10,10,10,10,10,10......10
但实际输出只有1,2,3。
【问题讨论】:
-
你在哪里看到这个结果?当我运行您的代码时,我只看到 1、2、3,正如预期的那样 because of how
.map()is specified to behave -
在您的原始代码中,您引用了未定义的
arr;我以为你的意思是array。 -
迭代时修改数组不会修改map的迭代。根据 Pointy 提到的规范:
The range of elements processed by map is set before the first invocation of callback. Elements which are appended to the array after the call to map begins will not be visited by callback. -
如果需要无穷大,可以使用
for循环 -
我写错了输出。控制台中只有 1 2 3 。但我的问题仍然是一样的。在回调函数中,我正在改变数组以在每次迭代中拥有更多元素。
标签: javascript arrays closures map-function array-push