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()()
Yukarıdaki kodAşağıdaki kod snippet'inde `this` değerindeki değişiklik için bir açıklama var mı?
// 0 Window
// 1 Object
// 2 Window
// 3 Window
sorun this
değerinin ne olması gerektiğini dikte eden anlamakta yaşıyorum kaydeder.
// 0 Window
bu şal ilk çağrıldığında, ve bu noktada değeri this
obj
// 1 Object
ayarlı olmamalıdır çünkü mantıklı anlamda obj.test
artık düzgün obj
this
kaydeder
function x()
, eşittir yapar
// 2 Window
Bunun neden olduğundan emin değilim. Neden this
değeri func()
'a yayılmaz? this
'un işlevin sahibine başvurması gerektiğini düşündüm. Bu, içte function y()
yaratılmış olsa bile, bir şekilde pencereye kaldırılmış olduğu anlamına mı geliyor? function z()
ile Keza
// 3 Window
neden this
değeri değil function x()
aşağı geçirildi. this
'un değeri oralarda çoğaltılmıyor mu?
"func" işlevi "wrap" fonksiyonuna geçtiğinden, "wrap" fonksiyonunda "this" değeri ile aynı değeri alacağına inanıyorum. –
'z' işlevine gelince, global kapsam içinde yürütülür, böylece' this' değerinin 'window' olduğu anlaşılır. –
Yehuda Katz bu konuda oldukça iyi bir blog yazısı yazdı: http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/ –