首页 > 代码库 > 关于This的经典题目

关于This的经典题目

这个题目见过很多次了  

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;})();

 

关于This的经典题目