var a={i:1};//引用赋值。
var b=a; //按值赋值?a把它指向对象{i:1}的地址copy给b。
a.i=2;
console.log(b.i) //2
b=a是不是按值赋值呢?
大家的回答,b=a都是说引用赋值。那么如何解释函数参数都是按值传递的问题呢?
var a={i:1};//引用赋值。
var b=a; //按值赋值?a把它指向对象{i:1}的地址copy给b。
a.i=2;
console.log(b.i) //2
b=a是不是按值赋值呢?
大家的回答,b=a都是说引用赋值。那么如何解释函数参数都是按值传递的问题呢?
前几天和遇到了引用赋值的问题。
var a={x:1,y:2}
var b=a; //引用对象
a.z=3; //修改a对象的同时,b也会变;
a==>{x:1,y:2,z:3}
b==>{x:1,y:2,z:3}
当 b=a 时,应该是 b也指向a这个对象变量指向的对象,同时b对象变量被赋值了一个内存地址而这个地址就是a赋值的,所以也是按值传递的;就像var c=1,b;b=c;只不过是赋值的内容不一样,一个是值,一个是内存地址,但是都是值,实实在在的值
10 回答11.2k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
基本类型按值传递(复制),对象按共享传递(两个对象共享一个内存地址),也可以理解为按引用传递(指向同一块内存空间)。函数参数传递方式看参数的类型,并不全是按值传递;
更正一下:函数参数确实是按值传递的,只不过不同的类型传递的值不同,基础类型copy是值,引用类型copy的是地址值,而引用类型变量的复制,copy是一个指针。毕竟指针跟地址值还是不一样的。