总结的不一定全面,有疑问可以指出。
普通函数:
普通模式下:
哪个对象调用某个函数(方法)指向那个对象
function foo(){
console.log(this);
}
foo();
该this指向为Window;而该写法放在严格模式下 this指向undefined;
var obj = {
name:“john”,
sayHello:function(){
console.log(this);
console.log(this.name);
}
}
obj.sayHello();
该this指向为Window;
document.onmousedown = function(){
console.log(this);
}
该this指向为Window
全局的函数、变量可以看做Window的属性和方法,一般可以省去不写;
因此导致在一般模式下this指向Window,严格模式下undefined。
箭头函数:
this指向定义该函数的环境中的this
var name = “window”;
let foo = ()=>{
console.log(this.name);
}
foo();
该this指向为Window
let obj = {
name:“obj”,
sayHello:function(){
console.log(this);//obj
let foo = ()=>{
console.log(this);//obj
}
foo();
}
}
obj.sayHello();
let obj = {
name:“obj”,
sayHello:function(){
return function(){
console.log(this);//window
}
}
}
var fn = obj.sayHello();
fn();
let obj = {
name:“obj”,
sayHello:()=>{
return ()=>{
console.log(this);//window
}
}
}
var fn = obj.sayHello();
fn();
let obj = {
name:“obj”,
sayHello:function(){
/*setTimeout(()=>{
console.log(this);//obj
})*/
setTimeout(function(){
console.log(this);//window
})
}
}
obj.sayHello();