【发布时间】:2016-09-14 10:00:18
【问题描述】:
请阅读下面代码中的 cmets 以了解我在尝试什么 问。
预期输出:根据 JavaScript 中的传递引用机制,objOne 预计最后会记录 {},因为 objTwo 是用 {} 初始化的。
var objOne = {
x: 1,
y: 2
};
var objTwo = objOne;
// change the x vlaue to 2 by objTwo
objTwo.x = 2;
// Change the value of key x in objOne as well - pass by reference mechanism
console.log(objOne); // { x: 2, y: 2 }
/*** Pass by reference is understood in code, above this comment ***/
// Now what if objTwo initialized with empty object
objTwo = {};
console.log(objOne); // { x: 2, y: 2 } but expected output = {}
// As per pass by reference mechanism. objOne is expected to log {}, because objTwo was initialized with {}.
【问题讨论】:
-
在案例 1 中,
objOne和objTwo都指向同一个对象。所以可以通过其中任何一个更改x。重新初始化objTwo意味着你让它不再引用同一个对象。这不会导致所有其他现有引用变为 {} -
按引用的是 object,而不是变量。
-
当你做 objTwo = {};发生的事情是我将引用更改为空对象。
-
JavaScript 根本没有“按引用传递”,句号。 JavaScript 是一种纯粹的按值传递语言。引用传递在计算机编程中具有特定的含义:它将对变量的引用传递给函数。 JavaScript 从不这样做。
标签: javascript