this 是当前函数/当前模块的运行环境上下文。是一个指针型变量,普通函数中的 this 是在调用时才被绑定确认指向的。
通过不同的 this 调用同一个函数,可以产生不同的结果。
var userInfo = {
age: 16,
sayAge: function() {
console.log(this.age)
}
}
var age = 18
var say = userInfo.sayAge
userInfo.sayAge() // 16
say() // 18
为什么会产生这种差异呢?
函数体内部使用了this关键字,this指的是函数运行时所在的环境。
对于userInfo.sayAge()来说, sayAge()运行在userInfo环境,所以this指向userInfo;对于say()来说,say()运行在全局,所以this指向window。
var userInfo = {
age: 16,
sayAge: () => {
console.log(this.age)
}
}
var age = 18
userInfo.sayAge() // 18
为啥上面结果是18呢?
因为箭头函数没有this,箭头函数的this指向父作用域的this。
对于sayAge()来说,它的父作用域是全局,所以this指向window。