【前端学习笔记】Javascript常见问题之连等赋值

在日常工作中,有时为了图省事,会直接使用连等赋值

var a = b = 100

但是,这么做会埋下一个很大的坑
js 在执行上述代码操作时,实际会产生一个全局变量b,所以在使用连等时要注意这一点

下面再说说本文的重点
连等的执行逻辑
来看一个面试题

var a = {n:1};
a.x = a = {n:2};
console.log(a.x); // 输出?原因?

先说两条结论吧
1.连等时从右往左执行
2.js每次执行前会保存之前的引用

1.js会把a.x和a中的a的引用地址提出来,此时指向{n:1}
2.新开开辟一个空间,存放{n:2}
3.a={n:2} 将a的地址指向{n:2}
4.a.x=a (真正的高潮来了)此时,a会赋给a.x,但参考结论2,a.x执行前是里面的a引用地址是指向{n:1}的,也就是说会把{n:1}新增一个x属性,内容为{n:2}

{n:1,x:{n:2}}

5.a.x= a执行结束后,由于原{n:1}没有被调用地方,所以会被系统收回,此时a.x中的a 指向{n:2} ,所以 a.x为undefined

最后一点,如果{n:1}没有被回收,会怎么样呢?

var a = {n:1};
b = a; // 引用{n:1} 
a.x = a = {n:2};
console.log(a.x === a) //false
console.log(a === b.x) //true

是不是很神奇!

[参考文章]:
千万不要在JS中使用连等赋值操作 - 小小沧海 - 博客园 (cnblogs.com)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 为什么会出现这样的结果呢?不是应该等号右边一路赋值过来的吗,应该是下面这样的逻辑才对啊... 这种结果就是按照正常...
    zzglovecoding阅读 448评论 0 0
  • 今天逛群发现有同学问了这么一个问题image.png 其实这道题目的难点并不在引用类型相关知识点,而是在运算符优先...
    Bluesbone阅读 1,003评论 2 1
  • 1、离职多久了 2、大约多久到岗 3、离这里多远 4、会考虑搬家吗 5、公司会加班 6、为什么要离职 7、你们这个...
    临渊鲸落阅读 1,287评论 0 1
  • 首先是两个题 一、首先连续赋值其实是有顺序的 比如 : A=B=C 它的赋值顺序是 B=C , A=B 二、...
    布好阅读 729评论 0 0
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,391评论 11 349