function wrap(func) {
console.log('0', this)
return function x() {
console.log('1', this)
func()
return function z() {
console.log('3', this)
}
}
}
var obj = {
x: 5,
test: wrap(function y() {
console.log('2', this)
})
}
obj.test()()
Код выше регистрируетОбъяснение для изменения значения `this` в следующем фрагменте кода?
// 0 Window
// 1 Object
// 2 Window
// 3 Window
У меня возникли проблемы с пониманием того, что диктует, что значение this
должно быть.
// 0 Window
имеет смысл, потому что это, когда обертка первый называется, и в этот момент его значение this
не должно быть установлено в obj
// 1 Object
имеет смысл obj.test
теперь равен function x()
, который должным образом регистрирует this
в obj
// 2 Window
Я не уверен, почему это происходит. Почему значение this
не распространяется на func()
? Я думал, что this
должен был ссылаться на владельца функции. Означает ли это, что хотя function y()
был создан внутри obj, это было как-то поднято к окну?
// 3 Window
Аналогично с function z()
почему значение this
не передавалась от function x()
. Разве не должно быть значение this
?
Я верю, что с 'func' передается функции' wrap', он получит то же значение 'this', что и' this' внутри 'wrap'. –
Что касается функции 'z', она выполняется внутри глобальной области, поэтому имеет смысл, что ее значение' this' является 'window'. –
Yehuda Katz написал довольно хорошее сообщение в блоге об этой теме: http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/ –