javascript连续赋值问题


Posted in Javascript onJuly 08, 2015

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

var a = {
   n : 1
 };
 var b = a;
 a.x = a = {n : 2};
 console.log(a.x);
 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后边,这条赋值到底执行了什么就一目了然了.

javascript连续赋值问题

这是语句执行时打印的log

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

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

javascript连续赋值问题

以上所述就是本文的全部内容了,希望大家能够喜欢

Javascript 相关文章推荐
JavaScript 指导方针
Apr 05 Javascript
JQUERY 对象与DOM对象之两者相互间的转换
Apr 27 Javascript
js类的静态属性和实例属性的理解
Oct 01 Javascript
extjs 学习笔记(二) Ext.Element类
Oct 13 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
Aug 20 Javascript
使用bootstrap实现多窗口和拖动效果
Sep 22 Javascript
Bootstrap表单控件学习使用
Mar 07 Javascript
div中文字内容溢出常见的解决方法
Mar 16 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
jQuery实现点击滚动到指定元素上的方法分析
Mar 19 jQuery
JS原形与原型链深入详解
May 09 Javascript
vue3不同环境下实现配置代理
May 25 Vue.js
JavaScript中函数(Function)的apply与call理解
Jul 08 #Javascript
JavaScript forEach()遍历函数使用及介绍
Jul 08 #Javascript
JavaScript中调用函数的4种方式代码实例
Jul 08 #Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
Jul 08 #Javascript
jquery获取多个checkbox的值异步提交给php
Jul 07 #Javascript
浅谈jQuery中setInterval()方法
Jul 07 #Javascript
javascript数组排序汇总
Jul 07 #Javascript
You might like
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
javascript中的this详解
2014/12/08 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
python如何将多个PDF进行合并
2019/08/13 Python
pycharm sciview的图片另存为操作
2020/06/01 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
美国性感内衣店:Yandy
2018/06/12 全球购物
静态成员和非静态成员的区别
2012/05/12 面试题
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
求职信内容考虑哪几点
2013/10/05 职场文书
门卫人员岗位职责
2013/12/24 职场文书
自动化职业生涯规划书范文
2014/01/03 职场文书
放飞蜻蜓反思
2014/02/05 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
欢迎新生标语
2014/10/06 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
Python面向对象编程之类的概念
2021/11/01 Python