javascript 连续赋值(转载)
先看一个例子
● var a = {n:1};
● var b = a;
● a.x = a = {n:2};
● console.log("a.x: " + a.x); //返回值:a.x: undefined
● console.log("a.n: " + a.n); //返回值:a.n: 2
● console.log("b.x: " + b.x); //返回值:b.x: [object Object]
● console.log("b.n: " + b.n); //返回值:b.n: 1
要点梳理
● Javascript中对象的赋值是引用传递,即变量中存储的是地址而不是值。
● Javascript中赋值运算符“=”的优先级是除了“,”以外最低的,并且是从右向左结合的。
● Javascript中运算的顺序是从左向右的。
过程分析
● var a = {n:1};
● //变量a指向对象{n:1}
● var b = a;
● //变量b也指向了对象{n:1},这时变量a和变量b指向同一个对象(同一个内存地址)
● a.x = a = {n:2};
● //这一句等价于“a.x = (a = {n:2});”,因为等号是从右向左结合的。但又由于运算过程是从左向右的,
因此该句的解析过程如下
● step1. 计算 a.x,在栈(对象的引用存储在栈中)中分配一块内存,用于保存指向堆(对象的值存储在堆中)中某处的引用,假定为 A。
● step2. 计算第一个等号的右边,其为第二个等号的求值结果(把变量a指向对象{n: 2},然后返回该引用)。
● step3. 把step2中求得的结果(指向{n:2}的引用)赋值给A。
将过程抽象化之后,可以描述为
● step1. 使a.x指向{n:2}。(同时,由于b与a指向同一个对象,因此b.x也指向了{n:2})
● step2. 使a指向{n:2}。
最后,我们再看一个例子
● function fun(){
● var a = b = 5;
● }
● fun();
● console.log(typeof a); //返回值:undefined
● console.log(typeof b); //返回值:number
这个很好理解,第2行“var a = b = 5;”被解析成“var a = (b = 5)”,其中a是一个显式声明,b是一个隐式声明。
原作者:微米博客
如若引用 请注明出处
javascript 连续赋值(转载)的更多相关文章
- javascript 连续赋值(连等运算)问题研究
前几天看到一个javascript 连续赋值的问题,运行了一下,结果出乎意料,发现这里的水真的有点深啊,连续赋值的底层机制,没有一本前端书籍有详细介绍的,自己做实验研究了一下,先来看结果: var a ...
- (转)深入理解javascript连续赋值表达式
引入 今天逛园子的时候看到一道javascript面试题,是关于连续赋值的,正好最近读jQuery源码经常看到这种连续赋值的表达式,所以很感兴趣. 废话不多说,来看题: var a = {n: 1} ...
- 前端开发面试题-JavaScript(转载)
本文由 本文的原作者markyun 收集总结. 介绍js的基本数据类型. Undefined.Null.Boolean.Number.String. ECMAScript 2015 新增:Symbol ...
- 深入理解 JavaScript 异步——转载
本文章转载于深入理解 JavaScript 异步 前言 2014年秋季写完了<深入理解javascript原型和闭包系列>,已经帮助过很多人走出了 js 原型.作用域.闭包的困惑,至今仍能 ...
- JavaScript技巧[转载]
在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是 ...
- JSP编程中常用的JavaScript技术(转载)
1.<tronMouseOver=this.style.backgroundColor=’#FFFFFF’ onMouseOut=this.style.backgroundColor=”> ...
- JavaScript(转载自 计科学院 慕课网)
什么是脚本语言? ①脚本语言介于HTML和C,C++,Java,C#等编程语言之间 ②脚本语言与编程语言有相似地方,其函数与编程语言类似,也有变量.与编程语言之间最大的区别是编程语言的语法和规则更为严 ...
- 面向对象编程思想(前传)--你必须知道的javascript(转载)
原文地址:http://www.cnblogs.com/zhaopei/p/6623460.html阅读目录 什么是鸭子类型 javascript的面向对象 封装 继承 多态 原型 this指向 ...
- 深入理解JavaScript系列(转载)
深入理解JavaScript系列 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaSc ...
随机推荐
- java面试题之谈谈你对java的理解
平台无关性:一处编译到处运行 GC:不用像c++那样手动释放堆内容 语言特性:泛型.反射.lamda表达式 面向对象:封装.继承.多态 类库:集合.并发库.网络库.IO库 异常处理
- bzoj1306: [CQOI2009]match循环赛(模拟爆搜)
Input第一行包含一个正整数n,队伍的个数.第二行包含n个非负整数,即每支队伍的得分.Output输出仅一行,即可能的分数表数目.保证至少存在一个可能的分数表.Sample Input 6 5 6 ...
- 【CF1015B】Obtaining the String(模拟)
题意:给定两个字符串,每次可以交换相邻两个字符,给出任意一组交换次数小于1e4的方案使得a串成为b串,输出交换的次数与位置,无解输出-1 n<=50 思路:每次找到第一个不相同的字符,从后面找到 ...
- noip 2010 关押罪犯 二分答案+二分图染色 || 并查集
题目链接 题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值&q ...
- Struts2的上传与下载
转自:http://blog.csdn.net/Mark_LQ/article/details/49822821 10.1.1 文件上传基本案例 第一步:上传组件依赖与commons-fileup ...
- 使用Python计算研究生学分绩(绩点)
最近看了CSDN上一个专栏<Python爬虫入门教程>,其中最后一篇作者写了个例子,用爬虫计算山东大学绩点,顿时想到前一阵子搞测评的时候还得拿计算器一点点算自己的平均学分绩,也想写一个自己 ...
- Android Q 兼容那些事
文章微信公众号「AndroidTraveler」首发 5 月 20 号参加了 Android Q Labs,因此本篇说一说会议的部分内容以及自己的一些想法. 会议主要是加深开发者对 Android Q ...
- [JSOI 2015] 子集选取
4475: [Jsoi2015]子集选取 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 363 Solved: 255[Submit][Status] ...
- FileChannel指南
推荐关注公众号:锅外的大佬 每日推送国外技术好文,帮助每位开发者更优秀地成长 原文链接:https://www.baeldung.com/java-filechannel 作者:baeldung 译者 ...
- JDK1.8和Spring 3.2.0 的坑
上午 org.apache.catalina.core.StandardContext listenerStart严重: Exception sending context initialized e ...