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:
第四次的逗号表达式等价于第三次执行: