前端关于这些问题你都会了吗?

Posted advancecabbage

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端关于这些问题你都会了吗?相关的知识,希望对你有一定的参考价值。

第 1题:输出以下代码的执行结果并解释为什么

var a = {n: 1};
var b = a;
a.x = a = {n: 2};

console.log(a.x)     
console.log(b.x)
答案为:undefined {n:2}

首先,a和b同时引用了{n:2}对象,接着执行到a.x = a = {n:2}语句,尽管赋值是从右到左的没错,但是.的优先级比=要高,所以这里首先执行a.x,相当于为a(或者b)所指向的{n:1}对象新增了一个属性x,即此时对象将变为{n:1;x:undefined}。之后按正常情况,从右到左进行赋值,此时执行a ={n:2}的时候,a的引用改变,指向了新对象{n:2},而b依然指向的是旧对象。之后执行a.x = {n:2}的时候,并不会重新解析一遍a,而是沿用最初解析a.x时候的a,也即旧对象,故此时旧对象的x的值为{n:2},旧对象为 {n:1;x:{n:2}},它被b引用着。
后面输出a.x的时候,又要解析a了,此时的a是指向新对象的a,而这个新对象是没有x属性的,故访问时输出undefined;而访问b.x的时候,将输出旧对象的x的值,即{n:2}。

 
 

 

以上是关于前端关于这些问题你都会了吗?的主要内容,如果未能解决你的问题,请参考以下文章

都已经 2022 年了,这些 Github 使用技巧你都会了吗?

校招面经学完C语言,这些面试真题你都会了吗?

亿级用户分布式存储,这些方案你都会了吗?

软负载硬负载,这些负载均衡知识你都会了吗?

软负载硬负载,这些负载均衡知识你都会了吗?

C语言宏定义里的这些“骚操作”你都会了吗?