Почему в строгом режиме отображается объект window?
Читаю везде, что при установлении строгого режима use strict this, находящийся в глобальном контексте выполнения, будет иметь значение undefined. То есть проще говоря, this не будет иметь значение window, только undefined.
Но я смотрю, что это не совсем так:
'use strict'
let object = {
f: function () {
console.log(this);
},
r: this
}
object.f(); //object
console.log(object.r); //window
function func() {
console.log(this); //undefined
}
func();
Window выводится, когда происходит обращение к свойству r объекта object. Почему? И почему тогда в примере с функцией, который расположен ниже, выводится не window, а undefined?
Ответы (1 шт):
Значение this зависит от строгого режима, если употребляется внутри функции, как в func() у вас в коде. Вне функций в глобальном контексте это будет глобальный объект (в браузерах — window) независимо от режима.
То, что в вашем коде this употреблено в литерале создания объекта, ничего не меняет. let object = { r: this } — тут будет то же самое this, что и в console.log(this) в глобальном контексте.
См., например, this: Global context:
In the global execution context (outside of any function), this refers to the global object whether in strict mode or not.