每日一题(2)

来康康这道题吖

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容