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 相关文章推荐
Draggable Elements 元素拖拽功能实现代码
Mar 30 Javascript
深入理解JavaScript 闭包究竟是什么
Apr 12 Javascript
基于javascipt-dom编程 table对象的使用
Apr 22 Javascript
javascript实现复选框超过限制即弹出警告框的方法
Feb 25 Javascript
jQuery实现底部浮动窗口效果
Sep 07 Javascript
javascript 中select框触发事件过程的分析
Aug 01 Javascript
BootStrap实现文件上传并带有进度条效果
Sep 11 Javascript
浅析vue插槽和作用域插槽的理解
Apr 22 Javascript
微信小程序 如何保持登录状态
Aug 16 Javascript
vue prop属性传值与传引用示例
Nov 13 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
Aug 19 Javascript
vue自定义树状结构图的实现方法
Oct 18 Javascript
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中的正则表达式函数介绍
2012/02/27 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
JavaScript面向对象编程
2008/03/02 Javascript
通过Jquery遍历Json的两种数据结构的实现代码
2011/01/19 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
使用jquery实现的循环连续可停顿滚动实例
2016/11/23 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
Python实现网站文件的全备份和差异备份
2014/11/30 Python
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
python 回调函数和回调方法的实现分析
2016/03/23 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
技校教师求职简历的自我评价
2013/10/20 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
团员个人总结
2015/02/26 职场文书
初中团委工作总结
2015/08/13 职场文书
公司年会主持词范文!
2019/05/07 职场文书
django上传文件的三种方式
2021/04/29 Python