gpt4 book ai didi

javascript - 什么时候无法确定是否初始化了 let 或 const?

转载 作者:行者123 更新时间:2023-11-29 19:05:22 24 4
gpt4 key购买 nike

在他的article关于 letconst Jason Orendorff 声明如下:

Crunchy performance details: In most cases, you can tell whether the declaration has run or not just by looking at the code, so the JavaScript engine does not actually need to perform an extra check every time the variable is accessed to make sure it’s been initialized. However, inside a closure, it sometimes isn’t clear. In those cases the JavaScript engine will do a run-time check. That means let can be a touch slower than var.

我决定尝试找到一个例子,证明这是正确的,但被难住了。

例如,让我们看看下面的酷刑场景:

function doSomethingDumb(q) {
function crash() { ++x; }
q.fn = crash;
crash();
let x;
return crash;
}

即使在函数结束时返回闭包,也保证返回语句永远不会执行,即使x被分配给了一个成员q(因此可能会逃逸)x 永远不会被初始化,因此 crash 总是会崩溃。

什么情况下无法判断变量是否已经初始化?

最佳答案

只是把它放到一个只有时会满足的条件中:

function example() {
if (Math.random() < 0.33) tryIt();
const x = 5;
if (Math.random() < 0.5) tryIt();
function tryIt() {
console.log(x);
}
}

在这个例子中,我选择了一个随机数,但它也可以取决于函数的输入参数。通常,访问变量的语句是否会在初始化之前执行是不可静态决定的——这就是 halting problem。 .您可以编写一个复杂的分析器来确定许多情况下的这一点,但在分析器的复杂性和开销之间总是需要权衡。

关于javascript - 什么时候无法确定是否初始化了 let 或 const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43334874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com