美文网首页程序员
普通函数与箭头函数的this指向

普通函数与箭头函数的this指向

作者: 阿鱼鱼_shelly | 来源:发表于2021-06-20 17:46 被阅读0次

    普通函数的this指向是调用的时候决定的,指向函数的调用者.没有调用者,默认指向window.

    箭头函数的this指向是定义的时候决定的,指向定义箭头函数时的对象.

    (1) 例子:

    一、普通函数

    function foo() {

    console.log(this.a)

    }

    var a = 1

    foo()

    const obj = {

    a: 2,

    foo: foo

    }

    obj.foo()

    const c = new foo()

    对于直接调⽤ foo 来说,不管 foo 函数被放在了什么地⽅, this ⼀定是 window.

    对于 obj.foo() 来说,我们只需要记住,谁调⽤了函数,谁就是 this ,所以在这个场景下 foo 函数中的 this 就是 obj 对象.

    对于 new 的⽅式来说, this 被永远绑定在了 c 上⾯,不会被任何⽅式改变 this.

    二、箭头函数

    function a() {

    return () => {

    return () => {

    console.log(this)

    }

    }

    }

    console.log(a()()())

    ⾸先箭头函数其实是没有 this 的,箭头函数中的 this 只取决包裹箭头函数的第⼀个普通函数的 this 。在这个例⼦中,因为包裹箭头函数的第⼀个普通函数是 a ,所以此时的 this 是 window 。另外对箭头函数使⽤ bind 这类函数是⽆效的。

    (2) this指向的优先级

    ⾸先, new 的⽅式优先级最⾼,接下来是 bind 这些函数,然后是obj.foo() 这种调⽤⽅式,最后是 foo 这种调⽤⽅式,同时,箭头函数的this ⼀旦被绑定,就不会再被任何⽅式所改变。

    (3)思考

    var m = {

                a: 1,

                b: 2,

                c: ()=>{

                  return this.a + this.b

                }

                // function() {

                //    return this.a + this.b

                // }

            }

            var N = m.c

            console.log(N())

    c为普通函数时打印的是什么,c为箭头函数时打印的又是什么呢?

    相关文章

      网友评论

        本文标题:普通函数与箭头函数的this指向

        本文链接:https://www.haomeiwen.com/subject/ozssyltx.html