在他article上let
和const
杰森Orendorff规定如下:什么时候不能确定let或const是否被初始化?
松脆性能细节:在大多数情况下,你可以告诉 声明是否已用完或不只是看代码,所以 每次访问变量时,JavaScript引擎实际上都不需要执行额外的检查 以确保它已被初始化为 。但是,在封闭内部,有时不清楚。在 这些情况下,JavaScript引擎将执行运行时检查。这意味着
let
可能比var
慢。
我决定尝试找到一个例子,在这个例子中,这是真实的,并被难倒了。
例如,让我们来看看下面的折磨的场景:
function doSomethingDumb(q) {
function crash() { ++x; }
q.fn = crash;
crash();
let x;
return crash;
}
即使关闭是在函数结束返回时,可以保证return语句将不会执行,甚至尽管x
被分配给q
的成员(并因此可能逃到野外),因此x
将永远不会被初始化,因此crash
将始终崩溃。
在什么情况下不可能判断变量是否已经初始化?
'crash()'甚至不会执行,当您尝试将'x'分配给'q.fn'时,它已经崩溃。 – Bergi
这应该是q.fn =崩溃。感谢您的支持。 – JeremiahB
顺便说一句,你可以链接文章与该报价? – Bergi