Почему для `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
) если другой объект не был предоставлен.