前几天在搜索面试题时发现了这么一段代码,执行完后感觉完全不与所想的一样

1 var a = {
2     n : 1
3 };
4 var b = a;
5 a.x = a = {n : 2};
6 console.log(a.x);
7 console.log(b.x);

输出结果为:

undefined

[object Object]

一开始以为语句应该是先给 a 赋值 {n : 2} , 然后再将 a.x 赋值 {n : 2} ;

但事实却不是那样,于是改动了一下代码,添加几条log

var test;
var a = {get test () {console.log("call a get");return test;},set test (value) {console.log("call a set");test = value;}
}
var test2;
var b = {get test2 () {console.log("call b get");return test2;},set test2 (value) {console.log("call b set");test2 = value;}
}
a.test = {n : 1
};
b.test2 = a.test;
console.log("begin");
a.test.x = a.test = {n : 2};

这样,在begin后边,这条赋值到底执行了什么就一目了然了.

这是语句执行时打印的log

先触发了一次get,然后触发了一次set.

本人猜想,该条语句执行的顺序为,先将左边变量取出,然后执行赋值.(在执行该条语句前,先将对象引用取出,然后从右到左执行赋值)

上图来自 http://snandy.iteye.com/blog/785445

部分参考资料:

http://blog.csdn.net/kittyjie/article/details/8242523

转载于:https://www.cnblogs.com/jiasm/p/4629381.html

关于一个js连续赋值问题之我见(词略穷,见谅)相关推荐

  1. js逆向之有道词js加密解析

    js逆向之有道词js加密解析 文章目录 js逆向之有道词js加密解析 需要用到的工具: 下面就介绍一下3种看js加密的代码方法: 第一种方法: 第二种: 第三种: 下面我们来了解我们要用什么解密md5 ...

  2. pdf.js实现多个不同词的高亮显示

    这里我是没有进行压缩过的版本进行修改,该版本目录分析参考:https://blog.csdn.net/a973685825/article/details/81285288 目标:实现多个词的高亮显示 ...

  3. html如何打包压缩,所有css打包压缩到一个js里面

    所有css打包压缩到一个js里面 打包css文件的意义:最终把css文件压缩到最终生成的js文件里,页面不需要再加载css文件,并且是压缩过的 打包css文件,安装style-loader css-l ...

  4. 两个html文件互相访问变量,访问一个js文件的变量上的HTML文件

    我已经在那里我宣布,我想在一个脚本在HTML中使用一个变量js文件访问一个js文件的变量上的HTML文件 js文件(controllerB.js) var modalArticles = []; $( ...

  5. 判断一个js对象,是否具有某个属性

    一个对象,想必我们关注的最多的应该是它上面的属性有哪些吧.那么,怎么判断一个对象是否具有某个属性呢? 1 /*下面是一个对比,看看在判断是否包括一个键上面,Object结构和Set结构的写法不同.*/ ...

  6. DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢,而是说操作了这个对象后,会触发一些浏览器行为(转)...

    一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来. 首先,DOM对象本身也是一个js对象,所以严格来说,并不是操作这个对象慢 ...

  7. 引用的一个JS组件,JCombo 0.9

    引用:http://www.cnblogs.com/eicesoft/archive/2007/09/18/897287.html 自己写的一个JS组件,JCombo 0.9 自己写的一个JS组件,J ...

  8. 自己封装的一个js方法用于获取显示的星期和日期时间

    自己封装的一个js方法用于获取显示的星期和日期时间 /*** 获取用于显示的星期和日期时间* @param date* @returns {string}*/ function getWeek(dat ...

  9. JavaScript:在一个JS文件中引入另外的一个JS文件

    前因 这个问题是因为有很多的Html文件(含有公共的JS文件),可能都需要使用同一个JS方法,但是这个JS方法需要依赖其他JS文件的支持,这时候我们不能每一个Html都要写导入JS的标签,我们需要使用 ...

最新文章

  1. java异常处理机制详解
  2. 骨骼捏脸功能的实现方法
  3. 用sqlSessionFactoryBeanName而不用sqlSessionFactory的原因
  4. Union-Find 并查集算法详解
  5. 怎么让电脑屏幕一直亮着_电脑屏幕总是闪烁?试试这个方法
  6. mysql教程qt linux_一步步学Qt,第四天-Linux 下mysql数据库链接
  7. 计算机图形学在线作业,电子科大16秋《计算机图形学》在线作业3答案
  8. 如何用python制作动画_如何基于Python Matplotlib实现网格动画
  9. 20、Tabs底部导航栏
  10. 一个LinkedList的简单体现(用户缓存手机通话记录)
  11. mysql-日常命令使用汇总
  12. 多线程之CountDownLatch工具类
  13. c语言编程电影院票务系统,C++课程设计----电影院售票系统
  14. 计算机的网络测速,网速知识 - 专业网速测试, 宽带提速, 游戏测速, 直播测速, 5G测速, 物联网监测 - SpeedTest.cn...
  15. 局部特征——角点检测(Harris,Shi-Tomasi)
  16. 易语言文本比较特征码
  17. java神雕侠侣1古墓情缘游戏攻略_神雕侠侣古墓派后期攻略讲解
  18. 新手小白纠结要做角色建模还是场景建模比较好?
  19. windows系统重装
  20. 苹果如何做ASO优化?优化的主要思路有哪些?

热门文章

  1. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java
  2. java json 内部类_使用Fastjson解析内部类的一个小问题
  3. bootstrape实战案例_第二百五十二节,Bootstrap项目实战-首页
  4. php 带下划线的函数,[宜配屋]听图阁
  5. android n进入分屏代码分析_智慧分屏为“何物”?华为MatePad Pro解锁便捷又高效的新姿势...
  6. sql 增加自增列 耗时长_SQLServer为已有数据的表添加一个自增列
  7. 并行处理的类型与CPU/GPU架构
  8. php 商场收银收费系统,使用的策略模式
  9. Android 系统开发_四大组件篇 -- Service 解析(用法)
  10. Linux内核调试 - 一般人儿我都不告诉他(一)【转】