【发布时间】:2019-02-07 08:06:56
【问题描述】:
@raina77ow 最近帮我找出了计算属性名称。作为their answer to my question 的一部分,他们分享了一段非常棘手的代码,展示了 JavaScript 的有趣方面:
const increment = (() => { let x = 0; return () => ++x })();
const movingTarget = { toString: increment };
const weirdObjectLiteral = { [movingTarget]: 42 };
console.log( weirdObjectLiteral[movingTarget] ); // undefined
当我在节点 CLI 中运行该示例时,最后一行不断输出 undefined,而 increment 中的值 x 不断增加。
如果我们将const movingTarget = { toString: increment }; 替换为const movingTarget = { [toString]: increment };,则此行为将不再发生,而是得到42 的输出,而increment 中的x 保持不变。
有人可以帮我理解为什么会这样吗? JavaScript 是什么让事情以这种方式工作?
相关问题:在我们从内存中明确删除increment 之前,increment 内的函数中的x 是否存在?
【问题讨论】:
标签: javascript ecmascript-6 computed-properties