调用方法 | function函数 | 箭头函数 |
---|
全局中调用 | this 指向 window 对象 | this 指向 window 对象 |
函数作为对象的方法,使用对象在全局中调用函数 | this 指向调用方法的对象 | this 指向 window 对象 |
构造函数 | this 指向 new 创建出的对象 | 箭头函数不能作为构造函数 |
bind, apply, call | this 指向新绑定的对象 | this 保持原先的指向 (箭头函数的this指向是固定的) |
- 上边是比较笼统的说法,针对于最简单的function或箭头函数。
- 当函数是比较复杂的嵌套使用时,应该根据以下的方法进行具体判断。
(1) 对于function函数,this 是一个动态的概念,当它所在的函数被调用的时候才能确定,此时的 this 是它被调用时所处的对象环境。
(2) 对于箭头函数,this 则是在定义时便确定,得看函数被定义时所在的具体作用域。 - 补充:with语法中的this指向
x = 1;
var app = {
x: 0,
fn1: function () {
console.log(this.x)
},
fn2: function () {
return function () {
console.log(this.x)
}
},
fn3: function () {
x = 2;
function fn() {
console.log(this.x)
}
return fn()
},
fn4: function () {
return {
x: 3,
fn: function () {
console.log(this.x)
}
}
},
fn5: function () {
setTimeout(function () {
console.log(this.x)
}, 10)
},
fn6: function () {
setTimeout(() => {
console.log(this.x)
}, 20)
},
fn7: function () {
setTimeout(function () {
console.log(this.x)
}.bind(this), 30)
},
fn8: () => {
setTimeout(() => {
console.log(this.x)
}, 40)
}
}