source code:
<html> <script> var x = 10; foo={ x:20, bar: function() { var x = 30; return this.x; } } console.log( foo.bar(), (foo.bar)(), (foo.bar = foo.bar)(), (foo.bar, foo.bar)() ); // 20 20 10 10 </script> </html>
第一个foo.bar(): 进入函数体执行时this 指向foo对象,因此this.x为20
第二种写法实际等价于第一种:
第三次执行this指向全局变量Window:
第四次的逗号表达式等价于第三次执行: