来康康这道题吖
涉及到知识点: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;
网友评论