js百度面试题

说出以下代码运行结果

var a = {n: 1}

var b = a;

a.x = a = {n: 2}

console.log(a.x);

console.log(b.x)

输出:

undefined

n: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 成员,所以输出 undefined

console.log(b.x);    // 变量 b 引用的对象是 {n:1,x:{n:2}},所以输出 {n:2}  

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 10,847评论 0 7
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,763评论 18 399
  • 语句 JavaScript程序的执行单位为行(line),也就是一行一行地执行。一般情况下,每一行就是一个语句。 ...
    米塔塔阅读 3,297评论 1 10
  • 又是一个晴朗的早晨 时光不错 阳光温柔拥抱了惺忪而起的世界 是啊 我又想起了你 一个孤独中伴我一程的人 路漫漫 匆...
    石川河女神阅读 1,319评论 4 6
  • 男人经常说女人现实物质,而女人却经常说男人花心。 在我看来现实物质的女生和说男人花心的女生大多都是没有安全感。 在...
    猴爸陪你读书阅读 4,075评论 0 6

友情链接更多精彩内容