如果数组发生更改,es6将映射


window.arr = [ 1, 2, 3, 4, 5 ];
window.arr.map(el=>{
console.log(el);
});
asyncFunction(){
window.arr = [ 2, 4, 6 ];
}

如果asyncFunction在映射仍在运行时更新数组,map会怎么做?

First offArray.prototype.map()是完全同步的,因此Javascript的单线程特性将阻止您的asyncFunction在windows.arr.map()运行期间运行。

但是,更有趣的是,window.arr = [2,4,6]window.arr变量分配了一个新数组。该数组与.map()正在处理的数组完全无关。因此,即使它们可以以某种方式交织在一起,.map()操作也有自己的数组,它只是继续处理该数组,而该数组与放入window.arr属性的新数组无关。

请记住,诸如之类的语句

window.arr = [2,4,6];

不会对以前在window.arr中的任何数组执行任何操作。如果其他任何人都引用了先前的数组,那么该数组仍然可以很好地存在并保持不变。

这里有一个简单的演示:

let a = [1,2,3];
let b = [4,5,6];
window.arr = a;
console.log(a);
window.arr = b;
console.log(a);

从中可以看出,当重新分配window.arr时,数组a根本没有更改。因此,在您的示例中,.map()运行的是数组a

最新更新