Estaba aprendiendo this en JavaScript y, según tengo entendido, dentro del modo estricto, this debería estar indefinido, pero cuando intento esto
"use strict"; function demo () { // Here this is Undefined in strict mode console.log(this); } //Here this refers to the Global Object console.log(this); demo();Como se menciona en el comentario, la consola aún imprime el objeto de ventana, excepto cuando llamo al objeto demo(). ¿Por qué es así?
ECMA2015 (ES6) especificó que los registros del entorno global proporcionan this valor:
8.1.1.4.8 HasThisBinding () Los registros de entorno global siempre proporcionan un enlace this cuyo valor es el objeto global asociado.
Para ECMA2018, esto se modificó ligeramente, de la tabla 17 en la sección 8.1.1.4 Registros ambientales globales de esta edición:
Tabla 17: Campos Adicionales de Registros Ambientales Globales
...
Nombre de campo : [[GlobalThisValue]]
Valor : Objeto
Significado : Objeto El valor devuelto porthisen el ámbito global. Los anfitriones pueden proporcionar cualquier valor de objeto de ECMAScript.
Sin embargo, los entornos de host típicos aún establecen el valor global de this en el objeto global y supongo que continuarán haciéndolo.
Si bien el modo estricto proporciona que this valor en una función llamada simple y directamente sea undefined , no suprime la creación de un enlace para this en el registro de entorno global que se verá como this valor en global, nivel de archivo código.