此问题已在此处有答案:
Is JavaScript a pass-by-reference or pass-by-value language?(33答案)
14小时前关闭
我有这个功能:
static calculatePrice(offer)
{
if (typeof (offer.TakerGets || offer.taker_gets) == "string")
offer.quality = 1 / offer.quality;
return offer.quality / 1000000;
}
我不明白为什么函数修改了我传递给它的值(this.book[currency][side][this.j[currency][side]]
)。它不修改副本,而是修改原始文件,就好像我给它传递了一个指针一样。
1条答案
按热度按时间3phpmpom1#
当你将一个对象传递给一个函数(或者将它从一个变量赋值给另一个变量)时,你传递的是一个名为 object reference 的值,它告诉JavaScript对象在内存中的位置。* (是的,它是一个位,就像其他语言中的指针。)* 您没有传入对象的副本。所以是的,函数可以通过修改对象的属性等来改变对象的状态。
让我们举一个更简单的例子:
在该代码中,
example
函数可以修改对象的属性,因为传入的是对象引用。值得注意的是,JavaScript仍然是纯粹的按值传递,只是传递的值是一个对象引用。
example
函数不能做的是通过将不同的对象分配给arg
(arg = someOtherObject
)来更改example(obj)
中使用的obj
变量。)这样做只会影响arg
,而不会影响obj
。(没有从arg
返回到obj
的链接,它们只是具有相同的值。)