javascript - JS引用赋值,按值赋值的理解
PHP中文网
PHP中文网 2017-04-11 10:02:29
[JavaScript讨论组]
var a={i:1};//引用赋值。
var b=a;   //按值赋值?a把它指向对象{i:1}的地址copy给b。 
a.i=2;
console.log(b.i) //2
  1. b=a是不是按值赋值呢?

  2. 大家的回答,b=a都是说引用赋值。那么如何解释函数参数都是按值传递的问题呢?

PHP中文网
PHP中文网

认证0级讲师

全部回复(6)
PHP中文网

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

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是一个指针。毕竟指针跟地址值还是不一样的。

高洛峰

可以去查阅js的基本类型引用类型

附带参考链接 http://www.tuicool.com/articl...

黄舟

你这个例子是按引用传递

b=a

a是一个对象,你把对象的引用地址直接赋给了b那就是a、b共同引用一个变量

基本类型按值传递,对象函数这些按引用传递

伊谢尔伦
var b = a;

a 是一个 对象 {}

所以当

var b = a;

时 就是 把 {} 的指针传给了 b

PHPz

前几天和遇到了引用赋值的问题。

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;只不过是赋值的内容不一样,一个是值,一个是内存地址,但是都是值,实实在在的值

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号