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