码迷,mamicode.com
首页 > Web开发 > 详细

JS笔试题

时间:2016-12-28 17:15:56      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:技术分享   lap   访问   变量赋值   分享   优先   变量   引用   方法   

JS 引用相关题目

以下代码输出什么? 为什么?

技术分享
1 var a = {n:1}; 
2 var b = a;  
3 a = {n:2}; 
4 a.x = a ;
5 console.log(a.x);
6 console.log(b.x);
View Code
技术分享
1 var a = {n:1}; 
2 var b = a;  
3 a.x = a = {n:2}; 
4 console.log(a.x);
5 console.log(b.x);
View Code

第一个问题:

a.x ---> {n:2,x:a};
b.x ---> undefined;

解答:a的值很清晰了,a第二次赋值以后变成了{n:2},随后添加了x属性指向自身。而对于b,在a第二次赋值以后,由于js中给变量赋值为object类型时,变量中存储的是对这个object的引用。
此时,a指向{n:2} ,而b指向了{n:1} ,a和b指向不同的对象,因此,在a上添加属性对于b无影响,b.x自然就是undefined。

 第二个问题:

解答:第三句里的主要难点在js运算符的优先级,访问属性、调用方法运算符"."的优先级高于赋值运算符。因此执行顺序是

  1. 给a添加属性x,此时a,b都是 { n:1,x:undefined }a.x 运算后的结果即为这个object(可以说也就是b)的x属性值。
  2. 把{n:2}赋值给a,此时a是 {n:2} ,b是{ n:1,x:undefined }。这个时候a.x 已经运算完了,不会再与a产生任何关系,a.x依旧代表那个n为1对象的x属性值,和a已经没关系了。
  3. 把{n:2}赋值给a.x 也就是 { n:1,x:undefined }这个对象的x属性,这个时候b依旧指向这个object,因此此时,a是{n:2},b是{n:1,x:{n:2}}

 

JS笔试题

标签:技术分享   lap   访问   变量赋值   分享   优先   变量   引用   方法   

原文地址:http://www.cnblogs.com/huenchao/p/6229704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!