深扒JS函数中的this

Posted by Mars at

JS函数中的this到底指向啥?

哪里有this?

只有函数作用域全局作用域中有this属性,块级作用域中没有。

非严格模式,浏览器全局作用域中this 指向 Window对象。(严格模式为undefined)

函数作用域中的this指向在函数调用的时候决定。

普通函数内部的this

使用函数声明或函数表达式声明的函数,内部的this:

指向调用这个函数的上下文对象,也就是函数被调用时点号前面的对象。

函数作为一种特殊的对象,存放于堆内存中,函数名保存的是函数对象的内存地址。无论函数被如何传递,函数中的this指向只有在函数执行的时候才决定,它永远指向调用它的那个对象。

如果函数被直接调用,而不是作为对象的方法(不使用’obj.func’形式,而是func()形式),那么浏览器下默认函数的this为window。

箭头函数内的this

箭头函数内部作用域的没有自己的this,它始终引用它定义所在位置上下文中的this。

翻译成人话:

全局作用域中定义的箭头函数,this值始终指向window,永远不会改变。

一个函数A中定义的箭头函数,箭头函数里的this就等同于函数A的this。只要A的this不变,箭头函数在任何地方以任何形式调用this都不变。

function outer(){
// 这里inner是箭头函数,它内部的this和它定义上下文outer的this是一致的。
    let inner = ()=>{
        console.log(this)
    }
    return inner
}

// 这里outer()被裸调用,outer的this是window。
// 返回内部箭头函数inner,this与outer一致,因此也为window,赋值给了变量a。
let a = outer()

a() // window
Keywords: JavaScript
previousPost nextPost
已经有 1000000 个小伙伴看完了这篇推文。