JavaScript中引用/值传递了什么?
这个问题在这里已经有了答案:
你的测试代码是错误的。 在看到你是“通过引用传递”的情况下,这并不意味着你是“通过引用传递”,这意味着你正在改变对象/数组的内容 ,而不是对象引用本身。
如果你看到你是“按价值传递”,那是因为你设置的价值没有改变。
当你分配 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