逗号表达式。
题目
var x = 20;
var temp = {
x: 40,
foo: function() {
var x = 10;
console.log(this.x);
}
};
(temp.foo, temp.foo)();
答案
20
解析
因为使用了逗号表达式,所以会依次对括号里的项进行计算,然后返回最后一项计算后的值。那么经过计算后返回的是一个新的函数,与temp 和 foo 都无关了。这个函数直属于window,所以 this.x 指向的是20;
拓展
如果将题目修改一下:
var x = 20;
var temp = {
x: 40,
foo: function() {
var x = 10;
console.log(this.x);
}
};
(temp.foo)();
此时没有逗号表达式,就不会先计算,然后再返回,而是直接返回。
当中的 (temp.foo)(); 等同于 temp.foo(); ,所以结果是40.