Почему для `this` установлено значение`window`, если я использую `function.apply(undefined, args)`?

Взгляните на этот пример:

function aaa () {
    console.dir(this)
}

function bbb () {}

aaa.apply(undefined, [1,2,3]) // this in aaa is `window` object
aaa.apply(bbb, [1,2,3]) // this in aaa is `bbb` function

Почему this установлен в window в первом случае, хотя я пытаюсь заставить его быть undefined?

2 ответа

Когда не в строгом режиме и либо null или же undefined передается в качестве первого аргумента .apply(), this будет установлен на глобальный объект, который window в браузере.

В строгом режиме было бы установить this к фактической стоимости, которую вы передаете.


В общем, строгий режим старался быть терпимым к ошибкам и даже автоматически "исправлять" некоторые ошибки. Это иногда оказывалось проблемой, потому что вещи, которые должны были быть немедленными ошибками кодирования, были "скрыты" системой. строгий режим был изобретен по ряду причин, и одной из причин было прекращение сокрытия ошибок кодирования.

Потому что так работают вызовы функций, если вы не в строгом режиме. Без строгого режима, функция this ссылка всегда ссылается на объект, и это будет глобальный объект (т.е. window) если другой объект не был предоставлен.

Другие вопросы по тегам