來康康這道題吖
涉及到知識點: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;