JavaScript中引用/值传递了什么?

这个问题在这里已经有了答案:

  • Javascript的参考与价值[复制] 4个答案

  • 你的测试代码是错误的。 在看到你是“通过引用传递”的情况下,这并不意味着你是“通过引用传递”,这意味着你正在改变对象/数组的内容 ,而不是对象引用本身。

    如果你看到你是“按价值传递”,那是因为你设置的价值没有改变。

    当你分配 str ,或者obj2或者arr2 (你的代码所说的那些是“按值”)时,你在内部作用域参数变量上设置一个新的引用。 你没有改变外面的一个。 所以当你打印它(在test功能之外)时,它只是保持它分配的值。

    同样,你看到的那些被“通过引用”传递,你只是改变它们的属性,即变量的“内容”。 如果你这样做:

    obj1.val = "Obj1 was passed by reference!";
    

    然后你设置“val”而不是“obj1”。 这就是为什么你会发现它在“外面”发生变化。 或者当你这样做时:

    arr1[0] = 'r';
    arr1[1] = 'e';
    arr1[2] = 'f';
    

    您正在设置“arr1的元素0”,“arr1的元素1”等,而不是“arr1”。

    所以你的代码不能证明你认为它证明了什么。

    在某些情况下,你正在改变对象,并在其他对象中分配不同的对象,这就是你所看到的实际差异,而不是“通过引用或值传递”。

    顺便说一句,Javascript不能按照你想要的方式“通过引用传递”。 你不能只设置一个范围参数变量值并假装它在该范围之外改变。 其他语言可以让你做到这一点,但不是Javascript。 您将参数(指针)传递给参数内容中的对象,但参数本身与“传入的变量”无关(除了最初指向相同的对象外)

    链接地址: http://www.djcxy.com/p/20993.html

    上一篇: What is passed by reference / value in JavaScript?

    下一篇: How to pass a reference of scope's model to a function