最近发现很多同学的博客里都会解释js连续赋值问题,各种概念辈出,特别是对于不理解的同学来说,更加一头雾水,我这里做个简单解释,也许不懂的一看就明白了。

先抛出一个问题:

var a = {c:1}         //第一步
var b = a;            //第二步
a.x = b.y = b = {c:2} //第三步
console.log(a)        // {c:1,x:{c:2},y:{c:2}}
console.log(b)        // {c:2}

第一步,第二步相信大家都很好理解,但是第三步是什么鬼,现实中基本上很难遇到,而且也不推荐这么写,好好的赋值不行么,干嘛要搞事情?对,话虽这么说,但是这毕竟是考验大家对赋值的理解嘛。在拆解以上问题的时候,大伙儿要先明白两个概念

1、引用数据细节

给一个变量赋值的时候,若“=”右侧是基本数据类型(Boolean String Number Null Undefined),就是真的“赋值”了;若“=”右侧是复合型数据(Array Object),则是数据的引用,也就是“指向”不一样而已

2、赋值数据可拆分成两步

例如:var d = 1 其实相当于 var d;d = 1;

理解以上两个概念后,我们以图示演示第一步、第二步执行完毕的结果

执行到第二步是以上结果,相信不难理解。
然后我们再将第三步拆解为步骤甲、乙、丙

甲步骤:

a.x = undefined
b.y = undefined

图示

乙步骤:

这个时候b的指向发生了变化

b = {c:2}

图示:

丙步骤:

最后将b指向的内容分别赋值给a.x a.y。这个时候问题的难点就来了。不是b.y么,为毛变成a.y了? 逗我玩呢是不?我们往上看,步骤乙,这个时候a和b都是指向同一个内存地址,谁的x谁的y没有区别,大家是好兄弟,共用的。

a.x = {c:2}
a.y = {c:2}

图示:

是不是很简单?如果你还是不理解,那么哥只能给你一个建议:吃饭睡觉上厕所,夜里别想妹子,只要脑袋是清醒的,就思考这个问题。不用两天,你肯定可以搞懂。
PS:还搞不懂咋整?还搞不懂你打我(打不到)

也许这样理解JavaScript连续赋值更加简单明了一些相关推荐

  1. 对面向对象的理解(转载原因:举例简单明了)

    1.什么是面向对象语言 面向对象语言(Object-Oriented Language)是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分. ...

  2. 在VUE项目中使用SCSS ,对SCSS的理解和使用(简单明了)

    首先要了解什么是CSS 预处理器? SCSS是一种CSS预处理语言 定义了一种新的专门的编程语言,编译后形成正常的css文件,为css增加一些编程特性,无需考虑浏览器的兼容性(完全兼容css3),让c ...

  3. 浏览器解析jsx_简单理解JavaScript,TypeScript和JSX

    原标题:简单理解JavaScript,TypeScript和JSX Java: 基本概念: Java一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为Java引 ...

  4. 也许开发需要的只是一份简单明了的表格

    本人原先是一名移动端开发工程师,本来是要一条道走到黑,准备做个it大咖,结果事与愿违,走到了测试的道路上.今天介绍一件通信测试上发生的事. 公司为青海移动做个项目,处于系统测试阶段,对各个系统进行测试 ...

  5. 深入理解javascript的闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...

  6. 深入理解Javascript闭包(一)

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用于.变量作用域包括 ...

  7. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  8. 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

    才华横溢的Stoyan Stefanov,在他写的由O'Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会 ...

  9. 深入理解JavaScript的闭包特性如何给循环中的对象添加事件

    初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...

最新文章

  1. [译] Security Token 生态 — 项目指南
  2. matlab7 mat,matlab7.0里生成的mat文件为什么用matlab6.5打不开呢?
  3. 陆续放出各种安装及配置文档
  4. Paint X for Mac的用法
  5. MFC中如何给对话框添加背景图片
  6. django生成文件txt、pdf(在生成 PDF 文件之前,需要安装 ReportLab 库)
  7. NIS认证管理域中的用户
  8. 想自学python看哪位的视频比较好-python自学视频看这个就对了
  9. java 注解 @?(name=quot;usernamequot;),【MyBatis】MyBatis 注解开发
  10. LeetCode(2) 两数相加递归解法,速度最快,内存消耗最小
  11. java实时推送_JAVA 基于websocket的前台及后台实时推送
  12. 七个习惯之一:积极主动
  13. 【复盘】如何打造自己的研发能力
  14. Git:rebase 是什么
  15. 无所不能的python是如何解决程序员的终身大事的?
  16. 核心期刊《微生物学杂志》
  17. 软件测试中文电子版姚静_软件测试[(美)ron patton]读书笔记
  18. eclipse集成scala插件
  19. linux学习笔记2.0
  20. 防撤回神器,免ROOT查看撤回消息!再也不用担心错过劲爆消息!

热门文章

  1. SpringMVC通过注解方式读取properties文件中的值
  2. Android与JS混编(js调用android相机扫描二维码)
  3. ZTE-中兴捧月-北京线下测试赛--B题
  4. SAP Cloud for Customer Price-计价简介
  5. 汉得宣布开源:基于容器的企业级应用 PaaS 平台
  6. Navicat Premium 12全系列
  7. 基于vue-cli,做个nuxt脚手架~
  8. 在线答题系统开发经验mysql,php
  9. 996月入三万,他却要放弃
  10. PhpCms V9调用指定栏目子栏目文章的方法