扫码关注官方订阅号
js参数传值-segmentfault这些答案解释的时候,又都是用的引用,指向某个对象。感觉有点混,请问该怎么理解能清楚点?
Stack overflow上的解释这个上面解释的是call by sharing, 好像是个专用的说法,有比较通俗的说法吗?
ringa_lee
http://fehacker.com/2014/12/1...看看这个
JavaScript中的对象参数传递是按照共享传递(call by sharing)的,基本数据类型是按值传递的。
基础数据类型放在栈上,引用数据类型放堆上,例如这么一段代码:
var foo = 1; var bar = { value: 2 }; function baz(obj) { obj.value = 1; } baz(bar);
声明foo和bar,内存分配如下:
foo
bar
==== 栈 ==== ======== 堆 ======== + foo=1 + + bar={value:2} +
然后调用baz(bar),则参数传递如下:
baz(bar)
==== 栈 ==== ======== 堆 ======== + obj + ——— 指向 ———> + bar={value:2} + + foo=1 +
画的有点抽象。。。
简单的说:就是把bar的引用地址copy一份,存到栈里,然后把这个值传递过去(这个值就是引用bar的内存地址)。
才疏学浅,如有疏漏,望指出。
不论是函数的参数、全局变量、局部变量、对象的属性,统统都是按值传递(或存储)。
只不过对于不同类型的值,其含义不同:
原始类型的值:其含义就是值本身。
对象类型的值:其含义是对某个对象的引用(或理解为地址)。
Over。
如果有人坚持说是按引用、按共享之类的,我也没有办法。这些名词不重要,关键是你要搞清楚本质。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
http://fehacker.com/2014/12/1...
看看这个
JavaScript中的对象参数传递是按照共享传递(call by sharing)的,基本数据类型是按值传递的。
基础数据类型放在栈上,引用数据类型放堆上,例如这么一段代码:
声明
foo和bar,内存分配如下:然后调用
baz(bar),则参数传递如下:画的有点抽象。。。
简单的说:就是把bar的引用地址copy一份,存到栈里,然后把这个值传递过去(这个值就是引用bar的内存地址)。
才疏学浅,如有疏漏,望指出。
不论是函数的参数、全局变量、局部变量、对象的属性,统统都是按值传递(或存储)。
只不过对于不同类型的值,其含义不同:
原始类型的值:其含义就是值本身。
对象类型的值:其含义是对某个对象的引用(或理解为地址)。
Over。
如果有人坚持说是按引用、按共享之类的,我也没有办法。这些名词不重要,关键是你要搞清楚本质。