我不明白为什么这段代码不能按预期工作:
"use strict";
window.obj.prop = (() => {
window.obj = { myobj: true };
return "value";
})();
我一直认为=
运算符首先评估它右边的任何东西(这个片段中的 IIFE),然后将结果分配给它左边的任何东西(window.obj.prop
在这个片段中)。看起来这里发生了一些不同的事情。
如果解释器首先评估 IIFE,那么它应该window.obj
在设置它之前创建.prop
,这不应该导致TypeError
. 另一方面,如果解释器首先检查 in 的存在prop
(window.obj
并且TypeError
由于window.obj
未定义而失败),那么它不应该评估不应该创建的 IIFE window.obj
。
我观察到两者都是window.obj
被创建和 TypeError
被抛出的,这对我来说没有意义。
笔记:
"use strict"
在“以防万一”的情况下,该片段的工作方式类似,没有它;- 该片段在浏览器(Chrome 80.0)和 Node.js(v13.3)中的工作方式相同;
- 在运行此代码段之前
window.obj
(或global.obj
在节点中)对象不存在;