为了账号安全,请及时绑定邮箱和手机立即绑定

JS引用赋值,按值赋值的理解

JS引用赋值,按值赋值的理解

互换的青春 2018-10-17 13:19:12
var a={i:1};//引用赋值。var b=a;   //按值赋值?a把它指向对象{i:1}的地址copy给b。 a.i=2;console.log(b.i) //2b=a是不是按值赋值呢?大家的回答,b=a都是说引用赋值。那么如何解释函数参数都是按值传递的问题呢?
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

基本类型按值传递(复制),对象按共享传递(两个对象共享一个内存地址),也可以理解为按引用传递(指向同一块内存空间)。函数参数传递方式看参数的类型,并不全是按值传递;

var a = {name:'aaa', age:22};function b(o){
    o.name = "bbb"
    console.log(o);
}
b(a);
a

输出:Object {name: "bbb", age: 22}Object {name: "bbb", age: 22} 
// 错误观点:如果是按值传递,a里面的name就不应该改变。/*其实是变量o复制了变量a的地址值,这个地址指向了a指向的那个对象,
 *所以改变o的属性值,即是改变了指向那个对象的属性值,
 *这里o已经是一个函数b的局部变量了。
*/

更正一下:函数参数确实是按值传递的,只不过不同的类型传递的值不同,基础类型copy是值,引用类型copy的是地址值,而引用类型变量的复制,copy是一个指针。毕竟指针跟地址值还是不一样的。


查看完整回答
反对 回复 2018-11-02
  • 1 回答
  • 0 关注
  • 612 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信