首页 > 代码库 > 关于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的经典题目
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。