我不明白为什么这段代码不能按预期工作:
"use strict";
window.obj.prop = (() => {
window.obj = { myobj: true };
return "value";
})();
[我一直认为=
运算符首先评估它右边的任何内容(此片段中的IIFE),然后将结果赋给它左边的任何内容(此片段中的window.obj.prop
)。看起来这里有些不同。
如果解释器首先评估IIFE,则它应在设置其window.obj
之前创建.prop
,这不会导致TypeError
。另一方面,如果解释器首先检查prop
中是否存在window.obj
(并由于TypeError
未定义而失败window.obj
),则它不应评估IIFE,因此不应创建window.obj
]。
[我观察到两个window.obj
均被创建和 TypeError
被抛出,这对我来说没有意义。
注意:
"use strict"
以“以防万一”的方式出现,该片段在没有它的情况下也类似地工作;window.obj
(或Node中的global.obj
)对象不存在;我不知道为什么他们在评估右侧之前不麻烦检查参考,但是此行为与setter属性抛出的一致。