Почему в строгом режиме отображается объект 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 шт):

Автор решения: vsemozhebuty

Значение 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.

→ Ссылка