我有以下代码(为简洁起见进行了编辑)。当我从Node
的实例调用addAttribute
时,attributes
映射在attributes
函数中正确地更新,但是当代码从该函数中退出时,更新就丢失了。
我希望,考虑到attributes
是关闭的,这不会发生。有什么想法吗?任何建议,这里将非常感激!
const Node = function(nodeData) {
let attributes = new Map();
const addAttribute = function (attribute) {
attributes = new Map([...attributes, ...attribute]);
console.log(attributes); // Works correctly, as expected.
}
console.log(attributes); // Shows empty map, decidedly not as expected.
return {
attributes,
addAttribute,
}
}
当您调用Node
时,它返回一个具有attributes
属性的对象。该属性保存了值attributes
变量的副本(这是一个空Map)。
之后调用addAttribute
,它将用另一个新的Map覆盖attributes
变量。
这不会改变之前分配给attributes
属性的原始Map。
请记住:attributes
属性保存了attributes
变量原始值的副本。它保存对变量的引用。
如果你想更新返回的Map,那么你需要改变现有的Map并且不能替换attributes
变量的值。
。attributes.set( attribute[0], attribute[1] )
为了简化,不使用闭包:
{
const original = new Map([
[1, "one"],
[2, "two"]
]);
const other = new Map([...original, [3, "three"]]);
console.log("original is unchanged", [...original.values()]);
};
{
const original = new Map([
[1, "one"],
[2, "two"]
]);
original.set(3, "three");
console.log("original is mutated", [...original.values()]);
}