美文网首页
每日一题(2)

每日一题(2)

作者: 欢欢小天使K | 来源:发表于2020-04-02 13:46 被阅读0次

    来康康这道题吖

    涉及到知识点:this指向,逗号表达式,赋值表达式,运算符优先级

    var a = 10;
    var foo = {
        a: 20,
        bar: function(){
            var a = 30;
            return this.a;
        }
    }
    console.log(foo.bar());
    console.log((foo.bar)());
    console.log((foo.bar = foo.bar)());
    console.log((foo.bar, foo.bar)());
    

    答案:

    打印结果:20 20 10 10

    第一问:
    调用点运算符和函数调用运算符优先级都是19,所以foo.bar指的 function(){ var a = 30; return this.a; },此时的this指向是foo对象,故打印20;
    第二问:
    加了圆括号运算符,按照从左故 同第一问没区别,打印20;
    第三问:
    (foo.bar = foo.bar)相当于foo.bar = function(){ var a = 30; return this.a; },this指向window,故打印10;
    第四问:

    逗号操作符 :对它的每个操作数求值(从左到右),并返回最后一个操作数的值。

    (foo.bar , foo.bar),第三问、第四问 经过赋值、逗号运算后,括号内的运算结果都是一个纯粹的函数了,而不是对象方法的引用,所以this指向window,故打印10;

    相关文章

      网友评论

          本文标题:每日一题(2)

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