首页 > 网站 > WEB开发 > 正文

百度HR给的JS面试题

2024-04-27 15:13:19
字体:
来源:转载
供稿:网友

说出以下代码运行结果

var a = {n: 1}  var b = a;  a.x = a = {n: 2}  console.log(a.x);  console.log(b.x)  输出:undefinedn:2解析:var a = {n: 1}    //定义变量 a为一个新对象,且这个新对象有一个值为 1的 n成员var b = a;    //定义变量 b,并且让 b也引用变量 a的对象// 经过上面这两句之后,变量 a 和 b 都引用了对象 {n:1}// 下面这句是问题的关键a.x = a = {n: 2}// a.x = 表示要给 a 引用的那个对象 {n:1} 的 x 成员赋值// 实际上,此时变量 b 也引用了这个对象 {n:1}// 此时,javaScript引擎首先给 {n:1} 添加一个空的 x 成员,即:{n:1,x:undefined}// 接下来要给{n:1,x:undefined}.x 赋的是什么值呢?// 要赋的值是 a = {n: 2}// 也就是先让变量 a 引用一个新的对象 {n:2}// 然后再把 a 的新值赋给{n:1,x:undefined}.x// 所以原来的那个对象变成了 {n:1,x:{n:2}}// 由于变量 b 始终引用那个原来的对象,所以 b 的值是 {n:1,x:{n:2}}// 由于变量 a 被赋予了一个新的对象,所以 a 的值是 {n:2}// 这面这两句是控制台输出console.log(a.x);    //变量 a 引用的对象是 {n:2},没有 x 成员,所以输出 undefinedconsole.log(b.x);    //变量 b引用的对象是{n:1,x:{n:2}},所以输出 {n:2}

需要web前端课程工具和电子书,可以加22群120342833

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表