ES6模块模式错误(扩充)
问题描述:
我在使用模块模式(扩充)和ES6 let关键字时出现错误。ES6模块模式错误(扩充)
This Works。
var Example = (Example => {
Example.name = "";
return Example;
})(Example || {});
console.log(Example);
这没有。
let Example = (Example => {
Example.name = "";
return Example;
})(Example || {});
console.log(Example);
我收到此错误。
Uncaught ReferenceError: Example is not defined
})(Example || {});
^^^^^^^
答
当你意识到这个答案变得相当清楚:
var x = (j => j)(x)
..becomes这样的:
var x = undefined
x = (j => j)(x)
这真的宣布x
为undefined
之前评估表达式和设置x
到结果。
然而,let
不具有财产 - 这不是悬挂:
let y = (j => j)(y)
..gets评价这一点。
y
不存在当你做(j => j)(y)
,所以它会引发一个引用错误。
答
var
声明是hoisted,这意味着名称被认为是“声明”,但undefined
直到整个功能范围内分配的(而不是块范围)。相反,ES6 let
声明未被挂起,因此参考Example
导致ReferenceError
,因为尚未声明。
+0
非常感谢@ patrick-roberts :) –
完美。感谢一堆@towerofnix :) –