4 回答
TA贡献1744条经验 获得超4个赞
它在Javascript中很有趣。考虑这个例子:
function changeStuff(a, b, c)
{
a = a * 10;
b.item = "changed";
c = {item: "changed"};
}
var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};
changeStuff(num, obj1, obj2);
console.log(num);
console.log(obj1.item);
console.log(obj2.item);
这会产生输出:
10
changed
unchanged
如果它是纯值传递值,那么更改
obj1.item
将对obj1
函数外部没有影响。如果它是纯粹的参考传递,那么一切都会改变。
num
会100
,并obj2.item
会读"changed"
。
相反,情况是传入的项目是按值传递的。但是通过值传递的项本身就是一个引用。从技术上讲,这称为分享呼叫。
实际上,这意味着如果您更改参数本身(与num
和一样obj2
),则不会影响输入参数的项目。但是如果你更改参数的INTERNALS,它将传播回来(如同obj1
)。
TA贡献1773条经验 获得超3个赞
变量不“保持”对象,它保存一个引用。您可以将该引用分配给另一个变量,现在它们都引用同一个对象。它总是按值传递(即使该值是参考值......)。
没有办法改变作为参数传递的变量所持有的值,如果JS支持通过引用传递,这将是可能的。
添加回答
举报