NodeJS 为什么我传递给函数的值表现得像一个指针?[副本]

avwztpqn  于 2023-04-29  发布在  Node.js
关注(0)|答案(1)|浏览(162)

此问题已在此处有答案

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]])。它不修改副本,而是修改原始文件,就好像我给它传递了一个指针一样。

3phpmpom

3phpmpom1#

当你将一个对象传递给一个函数(或者将它从一个变量赋值给另一个变量)时,你传递的是一个名为 object reference 的值,它告诉JavaScript对象在内存中的位置。* (是的,它是一个,就像其他语言中的指针。)* 您没有传入对象的副本。所以是的,函数可以通过修改对象的属性等来改变对象的状态。
让我们举一个更简单的例子:

function example(arg) {
    arg.answer = 42;     // Modifies the state of the object
}

let obj = {};
example(obj);            // Passes a value to the function saying where the
                         // object is in memory
console.log(obj.answer); // 42

在该代码中,example函数可以修改对象的属性,因为传入的是对象引用。
值得注意的是,JavaScript仍然是纯粹的按值传递,只是传递的值是一个对象引用。example函数不能做的是通过将不同的对象分配给argarg = someOtherObject)来更改example(obj)中使用的obj变量。)这样做只会影响arg,而不会影响obj。(没有从arg返回到obj的链接,它们只是具有相同的值。)

相关问题