函数内部的this之和函数的调用方式有关,和函数的定义方式没有关系
1全局函数直接调用,this==>window
function fn(){
console.log(this)
}
fn()
2对象内部的方法调用,this==>调用者
var obj={
fn:function (){
console.log(this)
}
}
obj.fn()
3自调用函数,this==>window
(function fn(){
console.log(this)
})()
(function fn(){
console.log(this)
}())
4事件处理函数调用 this==>事件源
div=document.querySelector('div')
div.onclick=function(){
console.log(this)
}
5定时器处理函数 this==>window
setTimeout(function(){
console.log(this)
},0)
6call或apply调用
var obj1={
a:222
};
var obj2={
a:111,
fn:function(){
alert(this.a)
}
}
obj2.fn()
obj2.fn.call(obj1)