只有变量的值是对象, 如 a = b = {id:1}; 这样 a 和 b 都指向同一个对象 执行 a.id = 2; 实际上是先读取a指向的对象,再对对象的id属性赋值。这不是对变量直接赋值,a变量的值没有改变。 那么 b.id 也是 2;
var a=b=c=4;//赋值分两步走,先是var a定义一个变量,而b,c是没有var所以会向上查找变量, //如果找不到就会给全局定义一个b,c变量。然后才是赋值过程,三者都等于4 b=5;//这里只针对b重新赋值,不会影响到其他变量。哪怕是赋值的是复合数据类型(即地址引用)也不会影响别人。 //只是赋值是对象,且有人修改对象属性时才要会影响,如楼上解释!
很多人问这类问题啊?不局限于js,其他语言也一样var a=b=c=d=3;看看计算机干了什么在内存中开辟出4个变量,abcd,这四个变量的值都是3;如果修改其中一个值,其他值不跟着变动,为什么呢?因为变量是独立的,值是常量的var a=b=c=d={id:1} var a=e={id:1}看看计算机又干了什么在内存中开辟出4个变量,abcd,这四个变量的值都是内存指针,指向同一个对象,而这个对象是{id:1}然后再次开辟一个变量e,同时将a和e的值指向另一个对象,虽然新的对象也是{id:1},但与bcd所指向的对象并不是同一个那么结果就了然了,常量型变量不受其他任何变量的改变而变动,除非修改他自己而引用型变量,则看引用对象的值
如 a = b = {id:1}; 这样 a 和 b 都指向同一个对象
执行 a.id = 2; 实际上是先读取a指向的对象,再对对象的id属性赋值。这不是对变量直接赋值,a变量的值没有改变。
那么 b.id 也是 2;
//如果找不到就会给全局定义一个b,c变量。然后才是赋值过程,三者都等于4
b=5;//这里只针对b重新赋值,不会影响到其他变量。哪怕是赋值的是复合数据类型(即地址引用)也不会影响别人。
//只是赋值是对象,且有人修改对象属性时才要会影响,如楼上解释!
var a=e={id:1}看看计算机又干了什么在内存中开辟出4个变量,abcd,这四个变量的值都是内存指针,指向同一个对象,而这个对象是{id:1}然后再次开辟一个变量e,同时将a和e的值指向另一个对象,虽然新的对象也是{id:1},但与bcd所指向的对象并不是同一个那么结果就了然了,常量型变量不受其他任何变量的改变而变动,除非修改他自己而引用型变量,则看引用对象的值