每日一题(2)

2020-04-02  本文已影响0人  欢欢小天使K

来康康这道题吖

涉及到知识点: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;

上一篇下一篇

猜你喜欢

热点阅读