为什么我的javascript参数没有通过引用传递

Why is my javascript argument not passed "by reference"?

本文关键字:引用 我的 javascript 参数 为什么      更新时间:2023-09-26

我确信我在这里错过了一些明显的东西,但是我希望changeMe方法的参数是"通过引用"传递的-换句话说,对函数内部参数的更改将改变函数外部的变量。

下面是在jsfiddle中运行的,使用Chrome的F12开发工具来显示控制台输出。http://jsfiddle.net/fzEpa/

var object1 = { Property1: 'Value1' };
changeMe(object1);
console.log(object1);
function changeMe(refToObject) {
    console.log(refToObject);
    refToObject = { Property1: 'Value2' };
    console.log(refToObject);
}

它是通过引用传递的,但它是对对象的引用,而不是对object1变量的引用(CC_1也是对对象的引用)。

您正在用对新对象的引用覆盖对该对象的引用。

这使得对原始对象的原始引用保持不变。

要修改对象,您可以这样做:

function changeMe(refToObject) {
    refToObject.Property1 = 'Value2';
}

对对象的引用作为参数值传递。然而:

refToObject = { Property1: 'Value2' };

此时,您将失去对refToObject先前引用的对象的引用,因为您将该变量赋值给引用不同的对象。

现在,如果您要编辑refToObject的属性而不是丢弃前对象引用,您的代码将按预期工作(如@Quentin的回答中首先解释的那样)。

如果你熟悉c++,这将相当于这样做:

void f(int* ref) {
    ref = new int(3);
}
int* a = new int(5);
f(a);
printf("%d",a); //Prints 5

您正在尝试重新定义属性1,因此它将无法工作。为了通过引用传递,你必须在ChangeMe()函数中这样做。为了更好地理解Javascript中通过引用传递变量