this指针详解

133 阅读1分钟

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