this始终指向当前函数的调用对象。它指代的对象是由this所在的执行作用域决定的(而不是根据this所在的定义作用域决定)。
在全局内示例:
var name = "this is window";
function f(){
var name = "this is f function";
console.log(this.name);
function fn(){
console.log(this.name);
};
fn();
return this;
}
f();//运行结果:this is window this is window在全局中去调用f(),this指向了全局window
在对象内调用:
var name = "this is window";
var obj1 ={
name: "this is obj1",
f:function(){
return this;
}
}
var aa = obj1.f();
aa.name;//this is obj1,指向了obj1
上述代码改动一下
var aa = obj1.f;
aa().name;//this is window,指向了全局,这里是取到了函数后再在全局作用域内调用了这个函数并返回this,此时this就是全局作用域window,然后指向this.name就是window.name