首先来看一段代码及其输出:
var name = "The Window";
var duck = {
name: "duck",
getDuck: function(){
console.log(this.name); // 打印 "duck"
return function(){
console.log(this.name); // 打印 "The Window"
}
},
getDucking: function(){
this.getDuck()();
}
}
duck.getDuck()(); // 这行代码执行的结果是先打印 "duck",然后再打印 "The Window"
duck.getDucking(); // 这行代码执行的结果是先打印 "duck",然后再打印 "The Window"
那么为什么这里getDuck()中匿名函数的打印结果始终是The Window呢?
主要原因是两个:
1.在内部函数中,this
的值是在函数被调用时确定的,而不是在函数被定义时:因此,当duck调用getDuck()时,会先输出duck。
2在JavaScript中,当函数作为一个独立的函数调用时,它的 this
默认指向全局对象:而 getFuck()
返回的是一个函数,因此这个函数的this指向全局对象,通过他调用内部匿名类,输出的就为The window