window.arr = [ 1, 2, 3, 4, 5 ]; window.arr.map(el=>{ console.log(el); }); asyncFunction(){ window.arr = [ 2, 4, 6 ]; }¿Qué hará el mapa si asyncFunction actualiza la matriz mientras el mapa aún se está ejecutando?
En primer lugar, Array.prototype.map() es completamente síncrono, por lo que la naturaleza de subproceso único de Javascript evitará que su asyncFunction se ejecute durante el tiempo que se ejecuta su windows.arr.map() .
Pero, aún más interesante es que window.arr = [2,4,6] asigna una nueva matriz a la variable window.arr . Esa matriz no tiene nada que ver con la matriz en la que estaba trabajando .map() . Entonces, incluso si de alguna manera pudieran entrelazarse, la operación .map() tiene su propia matriz y sigue trabajando en esa matriz y esa matriz no tiene nada que ver con la nueva matriz que se colocó en la propiedad window.arr .
Recuerde que una declaración como:
window.arr = [2,4,6]; no le hace nada a ninguna matriz que estuviera previamente en window.arr . Si alguien más tiene una referencia a la matriz anterior, esa matriz seguirá existiendo sin problemas y no se modificará.
Aquí hay una demostración simple:
let a = [1,2,3]; let b = [4,5,6]; window.arr = a; console.log(a); window.arr = b; console.log(a); A partir de esto, puede ver que la matriz a no cambió en absoluto cuando se reasignó window.arr . Entonces, en su ejemplo, fue a matriz en la que se estaba ejecutando .map() .