刚刚登陆微博,想看下有什么八卦新闻,突然看到@JS小组 分享的一道题:
@JS小组 是由资深前端工程师维护的一个小微博,既然由他们提出了这个问题,想必还是有点价值的,所以我也研究了下,觉得这个其实也不太难理解,主要牵涉到 逗号运算符 和 改变this 指向,下面分享下我的见解:
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 * 这个也属于返回值执行 */
小小挫见,好像有点勉强,对于底层的原理理解不深。欢迎大神们指教!