js参数传值-segmentfault
这些答案解释的时候,又都是用的引用,指向某个对象。感觉有点混,请问该怎么理解能清楚点?
Stack overflow上的解释
这个上面解释的是call by sharing, 好像是个专用的说法,有比较通俗的说法吗?
js参数传值-segmentfault
这些答案解释的时候,又都是用的引用,指向某个对象。感觉有点混,请问该怎么理解能清楚点?
Stack overflow上的解释
这个上面解释的是call by sharing, 好像是个专用的说法,有比较通俗的说法吗?
JavaScript中的对象参数传递是按照共享传递(call by sharing)的,基本数据类型是按值传递的。
基础数据类型放在栈上,引用数据类型放堆上,例如这么一段代码:
var foo = 1;
var bar = { value: 2 };
function baz(obj) {
obj.value = 1;
}
baz(bar);
声明foo
和bar
,内存分配如下:
==== 栈 ==== ======== 堆 ========
+ foo=1 + + bar={value:2} +
然后调用baz(bar)
,则参数传递如下:
==== 栈 ==== ======== 堆 ========
+ obj + ——— 指向 ———> + bar={value:2} +
+ foo=1 +
画的有点抽象。。。
简单的说:就是把bar的引用地址copy一份,存到栈里,然后把这个值传递过去(这个值就是引用bar的内存地址)。
才疏学浅,如有疏漏,望指出。
不论是函数的参数、全局变量、局部变量、对象的属性,统统都是按值传递(或存储)。
只不过对于不同类型的值,其含义不同:
原始类型的值:其含义就是值本身。
对象类型的值:其含义是对某个对象的引用(或理解为地址)。
Over。
如果有人坚持说是按引用、按共享之类的,我也没有办法。这些名词不重要,关键是你要搞清楚本质。
10 回答10.3k 阅读
4 回答8.6k 阅读✓ 已解决
7 回答10.7k 阅读
2 回答11.2k 阅读✓ 已解决
6 回答2.4k 阅读
5 回答4.2k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
http://fehacker.com/2014/12/1...
看看这个