浅析下关于js的 逗号运算符 和 改变this指向 的一道题(mv to git)

刚刚登陆微博,想看下有什么八卦新闻,突然看到@JS小组 分享的一道题:

微博分享图

@JS小组 是由资深前端工程师维护的一个小微博,既然由他们提出了这个问题,想必还是有点价值的,所以我也研究了下,觉得这个其实也不太难理解,主要牵涉到 逗号运算符 和 改变this 指向,下面分享下我的见解:

<!-- lang: js -->
foo.bar()     // -> 20
/**
 * 这个不用多说了吧,this指向foo,大家都懂的
 */



(foo.bar)()   // -> 20

/**
 * 这个我是这样理解的哈
 * 括号里面没有运算符
 * js执行时直接引用它的指向
 * 相当于foo.bar()
 * js进入foo对象内执行,属于指向型执行
 */ 


(foo.bar = foo.bar)()    // ->10
/**
 * 这个实际上是执行foo.bar = foo.bar的返回值
 * 而它的返回值是什么?
 * 就是foo.bar的function
 * 把function写出来就是以下代码,this指向window
 * 这个我把它记为返回值执行
 */
(function(){ var x = 30; return this.x })();


(foo.bar, foo.bar)()    // -> 10
/**
 * 逗号运算符,运算过后也返回foo.bar指向的function
 * 这个也属于返回值执行
 */

小小挫见,好像有点勉强,对于底层的原理理解不深。欢迎大神们指教!

转载于:https://my.oschina.net/luozt/blog/269869

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值