//1普通函数里 谁调用指向谁
var obj={
name:"hello",
age:1,
sayHello:function(){
console.log(this);
}
}
var name=obj.name;
console.log(name);
obj.sayHello();var name="window";
var obj={
name:"obj",
age:1,
sayHello:function(){
return function(){
console.log(this.name);
}
}
}
obj.sayHello();// 因为函数体没有调用所以什么也没 输出
obj.sayHello()();//window 等价于var a=obj.sayHello();a.();
//2在事件处理函数里面 第一层的this指向触发事件的对象
//3严格模式下 普通函数里 第一层的this指向 undefined
"use strict";
function foo(){
console.log(this);
var obj={
name:"hello",
sayHello:function(){
console.log(this);//obj
}
}
obj.sayHello();
}
foo();
//4箭头函数里指向定义时所在的作用域
var name="window"
var obj={
name:"obj",
sayHello:()=>{
console.log(this.name);//window
},
sayhi:function(){
console.log(this.name);//obj
}
}
obj.sayHello();//window
obj.sayhi();//obj
var name="window";
var obj = {
name:"obj",
sayHello:function(){
console.log(this);
return ()=>{
console.log(this);
}
}
}
obj.sayHello()();//obj
var name="window";
var obj={
name:"obj",
sayhello:()=>{
console.log(this);//window 箭头函数 定义时所在作用域
setTimeout(function(){
console.log(this)//window 谁调用指向
},1000);
}
};
obj.sayhello();
var name="window";
var obj={
name:"obj",
sayhello:function(){
console.log(this);//obj
setTimeout(function(){
console.log(this)//window
},1000);
}
};
obj.sayhello();总结:1普通函数里,谁调用只像谁。
2事件处理函数里,第一层的this指向触发事件的对象
3严格模式下。第一层this指向undefined
4箭头函数里指向它定义时所在的作用域