连续赋值的理解

原帖 http://www.iteye.com/topic/785445  底下某层楼理解的号

  1. var a = {n:1};
  2. var b = a; // 持有a,以回查
  3. a.x = a = {n:2};
  4. alert(a.x);// --> undefined
  5. alert(b.x);// --> [object Object]
时间: 2024-12-20 09:43:20

连续赋值的理解的相关文章

(转)深入理解javascript连续赋值表达式

引入 今天逛园子的时候看到一道javascript面试题,是关于连续赋值的,正好最近读jQuery源码经常看到这种连续赋值的表达式,所以很感兴趣. 废话不多说,来看题: var a = {n: 1} var b = a; a.x = a = {n: 2} console.log(a.x); console.log(b.x) 答案: console.log(a.x); // undefined console.log(b.x) //{n:2} 看到这个答案,我真是百思不得解.... 于是网上搜了搜

JavaScript的连续赋值的思考

下面是一个连续赋值的例子: 在这里面,先创建a对象并添加n:1,然后将a对象赋值给b,这时候a和b引用同一个对象.最后我们要着重理解这最后一行代码 a.x = a = {n:2}; 按照我们平常的思维,应该是{n:2}赋值给 a,a的引用改变了,但b仍然是原来的引用,然后再赋值给a.x,这时候a是{n:2,x:{n:2}},也即是a.x={n:2}.但是,很显然我们的执行结果不是这样的,为什么会这样呢? 其实这是调皮的运算优先级搞的鬼,a.x成员访问的优先级仅次于括号(),成员访问.访问的属性如

值得深思的连续赋值--赋值运算符运算顺序

最近在看到以前前辈留下的文章,对于连续赋值( var a={n:1}; a.x=a={n:2}) )这个知识点,一开始也搞不清楚,但是最终还是说服了自己,谈谈自己的心得.以下代码能回答正确的可以忽略本文. 1 var a={n:1}; 2 var b=a; 3 a.x = a = {n: 2}; 4 console.log(a.x); //? 5 console.log(b.x);//? 正确答案是: a.x= undefined; b.x= {n: 2}; 疑惑:为什么a.x与b.x不相等呢?

连续赋值和内存指针的问题解析(a.x=b={n:2})

前几天偶然看到了一个这样的题: 1 <script> 2 var a={n:1}; 3 var b=a; 4 a.x=a={n:2};//关键代码5 console.log(a.x);//undefined 6 console.log(b.x);//[object Object] 7 </script> 这个题代码不多,不过考察的知识点却非常不错.我们知道内存空间分为栈内存和堆内存.栈内存用来存放供js代码来执行的环境,所以为了保证性能减少内存占用,我们一般把占用空间较小的类似于基

js连续赋值、指针

jq的源码中有很多连续赋值,类似这样的: var a = {n:1}; var b = a; // 持有a,以回查 a.x = a = {n:2}; alert(a.x);// --> undefined alert(b.x);// --> [object Object] 网上有很多解释了,这里我做一下记录而已,化繁为简,比较容易理解的过程是这样的: 给{n:1},{n:2}分别起名个实际持有这两个内存地址的虚拟对象名字,比如:obj1 ->{n:1},obj2->{n:2} 1)

关于js的连续赋值

首先,来看一个经典的案例: <script>var a = {n: 1}var b = a;a.x = a = {n: 2}alert(a.x);alert(b.x);</script> 答案是什么呢? 首先,js中规定求值顺序是从左到右的,这个问题很容易忽略.什么意思呢,a.x = a = {n: 2},这句代码应该怎样理解呢?等价于a.x = (a = {n: 2}),在js中,类似的连续赋值是从左到右进行的,也就是说先对a.x进行赋值,再对a进行赋值.可能很难讲清楚,这里结合

Python——从连续赋值到斐波拉切数列

Python中有一个非常简洁的赋值语句用法,就是连续赋值. 要分别给两个变量赋值,我的第一念头是如下: 1 a = 1 2 b = 2 但其实python还提供了一种更简洁的写法如下 1 a , b = 1 , 2 这时我们很自然的就能理解为按顺序赋值,a = 首位数字1,b = 次位数字2.但实际上并不仅仅如此. 连续赋值语句中等式右边其实都是局部变量,而不是真正的变量值本身.当等号右边是定值时,这样做当然没有问题.但是如果右边是一个含有变量的表达式,那么赋值时会采用截至本句代码前一句为止,各

Golang的反射reflect深入理解和示例

编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 每种语言的反射模型都不同,并且有些语言根本不支持反射.Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的,只要包含这个包就可以使用. 多插一句,

Python——深入理解urllib、urllib2及requests(requests不建议使用?)

深入理解urllib.urllib2及requests            python Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同样遵循 GPL(GNU General Public License)协议[1] .Python语法简洁而清晰,具有丰富和强大的类库. urllib and urllib2 区别 urllib和urllib2模块都做与请求URL相关的操作,但