先来看段代码:
var name = ‘this window‘;
var object = {
name : "My Object",
getNameFunc: function () {
return function () {
alert(this.name);
}
}
}
var a = object.getNameFunc();
a() ;
答案是:’this window‘。有点出乎意料,这个this明明在object里,为什么打印出来是this window而不是My Object呢?
作用域是在函数定义时确立的,在一个函数内部还存在一个函数时,初次只会定义最外层的函数,内部的函数只会在外部函数执行的时候才会定义。而外部函数执行时 var a = object.getNameFunc();由于闭包内部函数被脱离了本来应该有的上下文,回到了全局作用域。所以此时this指向window。
时间: 2024-10-09 06:54:27