为JavaScript中的每个函数创建一个新的执行上下文。

运行以下代码时,内存中有多少个执行上下文?请注意,函数Bar不会被调用。

function Foo () {

  function Bar() {}

}

Foo();

另外,何时创建执行上下文?在评估时间或运行时?

最佳答案

函数的运行时调用是导致创建执行上下文的原因。因此,在您的示例中,只有一个函数调用,因此仅涉及一个执行上下文。

函数的静态(编译时)安排很重要,因为这确定了执行上下文的范围和最终内容。然而,对于创建上下文而言,真正重要的是对函数的调用。 (一些较旧的语言使用了“激活记录”一词,尽管它可能更适合用于基于堆栈的分配。)

您可以使用有时很古怪的the spec语言来阅读详细信息,尽管很难为树木认清森林。规范是根据控制权转移而编写的。函数调用是一种非常常见的发生方式,但是事件处理程序的调用也是如此,或者在浏览器最初加载时调用完整的<script>块也是如此。

10-05 21:02
查看更多