recorrer for es6 array javascript function foreach this invocation

javascript - es6 - El contexto de invocación(this) de la llamada a la función forEach



javascript foreach break (4)

Dentro de cada uno, this refiere al objeto window global. Este es el caso incluso si lo llamas desde un objeto diferente (es decir, uno que has creado)

window.foo = ''window''; var MyObj = function(){ this.foo = ''object''; }; MyObj.prototype.itirate = function () { var _this = this; [''''].forEach(function(val, index, arr){ console.log(''this: '' + this.foo); // logs ''window'' console.log(''_this: '' + _this.foo); // logs ''object'' }); }; var newObj = new MyObj(); newObj.itirate(); // this: window // _this: object

Me preguntaba cuál es el valor ''this'' (o contexto de invocación) de la función de devolución de llamada forEach. Este código no parece funcionar:

var jow = [5, 10, 45, 67]; jow.forEach(function(v, i, a){ this[i] = v + 1; }); alert(jow);

Gracias por explicármelo.


MDN dice:

array.forEach (devolución de llamada [, thisArg])

Si se proporciona un parámetro thisArg a forEach, se utilizará como este valor para cada invocación de devolución de llamada como si se llamara callback.call (thisArg, element, index, array). Si thisArg no está definido o es nulo, este valor dentro de la función depende de si la función está en modo estricto o no (valor pasado si está en modo estricto, objeto global si está en modo no estricto).

En resumen, si solo proporciona la devolución de llamada y está en modo no estricto (el caso que presentó), será el objeto global (ventana).

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


Si no pasa el segundo parámetro a forEach , this apuntará al objeto global. Para lograr lo que estabas tratando de hacer

var jow = [5, 10, 45, 67]; jow.forEach(function(v, i, a) { a[i] = v + 1; }); console.log(jow);

Salida

[ 6, 11, 46, 68 ]


Terminé la construcción del método forEach y quería compartir este diagrama con todos, espero que ayude a alguien más a tratar de entender su funcionamiento interno.