每日一題(2)

來康康這道題吖

涉及到知識點:this指向,逗號表達式,賦值表達式,運算符優(yōu)先級

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)());

答案:

打印結(jié)果:20 20 10 10

第一問:
調(diào)用點運算符和函數(shù)調(diào)用運算符優(yōu)先級都是19,所以foo.bar指的 function(){ var a = 30; return this.a; },此時的this指向是foo對象,故打印20;
第二問:
加了圓括號運算符,按照從左故 同第一問沒區(qū)別,打印20;
第三問:
(foo.bar = foo.bar)相當(dāng)于foo.bar = function(){ var a = 30; return this.a; },this指向window,故打印10;
第四問:

逗號操作符 :對它的每個操作數(shù)求值(從左到右),并返回最后一個操作數(shù)的值。

(foo.bar , foo.bar),第三問、第四問 經(jīng)過賦值、逗號運算后,括號內(nèi)的運算結(jié)果都是一個純粹的函數(shù)了,而不是對象方法的引用,所以this指向window,故打印10;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容