这个题目见过很多次了
var x = 10; var foo = { x: 20, bar: function() { var x = 30; return this.x; } }; alert(foo.bar()); alert((foo.bar)()); alert((foo.bar = foo.bar)()); alert((foo.bar, foo.bar)());
在开始前,在console中输入
a = 1 ;
b = 2;
(a, b);
将直接显示2 这表明逗号运算符直接返回后面一个表达式计算结果
再看
a = b 以及 (a = b)
输出2 表示赋值运算符返回赋值后结果
这里相当于定义了一个 tmp = foo.bar() 然后tmp()
但是 a.b() (a.b)() 看起来他们很不同 一个a对象调用了b() 第二个好像是函数运算
实际上由于 a.b 这个表达式没有作什么运算 编译器会去掉一层括号 当做 a.b()来运算
所以这里前两个的结果肯定是相同的 后两个也是
你可能会问啦 为什么后面的提示的值不是20 却是10
因为后面两个是函数表达式 你可以认为是匿名函数
他们相当于
(function(){ var x = 30; console.log(this.x); //10 return this.x; })();
时间: 2024-10-12 01:56:36