gpt4 book ai didi

javascript - 为什么这个 JavaScript 映射不是无限循环?

转载 作者:可可西里 更新时间:2023-11-01 02:53:54 25 4
gpt4 key购买 nike

我正在学习 JavaScript。我写这段代码是为了学习 map 功能。但是后来我很困惑为什么这不是连续映射它,因为每个映射序列都会将一个新元素推送到数组。它不应该在映射时继续推送新元素吗? 为什么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

最佳答案

引自MDN:

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. If existing elements of the array are changed, their value as passed to callback will be the value at the time map visits them.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Description

所以,它的行为是这样的,因为它就是这样设计的。它是这样设计的,除其他原因外,为了防止无限循环!

map 是函数式编程世界中的一个函数,其中不可变性是一个重要原则。根据这一原则,如果您对输入调用 map(并且其他变量不变),您将始终得到完全相同的结果。允许修改输入会破坏不变性。

关于javascript - 为什么这个 JavaScript 映射不是无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56545748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com