Erstellt Javascript forEach einen neuen Ausführungskontext für jedes Array-Element oder aktualisiert es nur die lexikalische Umgebung des aktuellen Ausführungskontexts?
P粉663883862
P粉663883862 2024-04-02 00:13:25
0
1
428

Wird im folgenden Code für jedes Element im Array ein neuer Ausführungskontext erstellt, oder bleibt der Ausführungskontext derselbe und nur der Umgebungsdatensatz der lexikalischen Umgebung wird aktualisiert?

Der Code gibt keinen Fehler aus, daher gehe ich davon aus, dass der neue Bereich (lexikalische Umgebung) unabhängig vom Ausführungskontext erstellt wird, bin mir aber nicht sicher, ob ich richtig liege.

const nums = [1, 2, 3]

nums.forEach(num => {
  const foo = num
})

P粉663883862
P粉663883862

Antworte allen(1)
P粉674876385

提供给标准库函数的回调没有什么特别的。它们仍然是函数,并且仍然以调用函数的通常方式进行调用。

是的。每当您调用函数时(在本例中,当 forEach 调用其回调时),都会创建一个新的执行上下文。

(在本例中)不是与创建新的执行上下文分开的,不是。作为调用函数的标准过程的一部分。

相比之下,考虑一个 for-of 循环:

for (const num of nums) {
    const foo = num
}

这里没有回调函数可以调用;循环体只是一个块。但是,由于块作用域语义的定义方式,会为每次循环迭代创建一个新的词法环境对象。这意味着,与 forEach 回调类似,每次循环迭代都有一个新的 foo,即使不需要函数调用。 (如果您要在该块内创建事件处理程序或类似的事件处理程序,这非常方便。)(如果我们使用 var 代替,则不会每次都有一个新的,var 会跳出该块到周围函数作用域或全局作用域,因为 var 不是块作用域。这是我建议永远不要在新代码中使用 var 的原因之一。)

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage