【发布时间】:2016-11-20 21:06:44
【问题描述】:
例如,我们有以下 JavaScript 代码:
function f(o) {
o.message = "set in f";
o = {
message: "new object!"
};
console.log(`inside f: o.message="${o.message}" (after assignment)`);
}
let o = {
message: 'initial value'
};
console.log(`before calling f: o.message="${o.message}"`);
f(o);
console.log(`after calling f: o.message="${o.message}"`);
在这些特定的行中
o = {
message: "new object!"
};
我们正在创建名为“o”的新对象,但在上一行
o.message = "set in f";
我们正在修改名称为“o”的原始对象的属性(因此在我的理解中修改了对象本身)。
我的问题是为什么在这些情况下分配行为会有所不同?对象本身及其属性不应该一样吗?
例如,函数体中的 'o' 赋值应该改变原始的 'o' 对象而不是创建新对象。
【问题讨论】:
-
不...非常简单的例子是
{} != {}。每个都是一个新对象,没有引用另一个
标签: javascript object syntax assign