【问题标题】:When is the Execution Context created?什么时候创建执行上下文?
【发布时间】:2017-03-22 02:29:58
【问题描述】:

我正在阅读关于闭包的教程,它描述了执行上下文如下:

当一个 JavaScript 函数被执行时,一个被称为 创建执行上下文。执行上下文是一个抽象 规范规定的用于跟踪执行的概念 其相关代码的进度。当应用程序运行时,初始 创建全局执行上下文。随着每个新功能的创建, 创建了形成执行上下文的新执行上下文 堆栈。

执行 JavaScript 函数时,会创建一个称为执行上下文的构造。

这句话说的是在函数执行时会创建一个Execution Context。

在创建每个新函数时,都会创建新的执行上下文,形成一个执行上下文堆栈。

这句话说的是在创建新函数时会创建一个执行上下文。

我的问题是:哪个是正确的?

【问题讨论】:

    标签: javascript closures


    【解决方案1】:

    第一个。 执行函数时会创建执行上下文。 “执行上下文堆栈”也称为“调用堆栈”。

    当函数被创建时,它们存储对活动执行上下文(创建它们的)范围的引用——这就是我们所说的闭包范围。当它们将被执行时,它们的执行上下文将创建一个新的范围,该范围链接到存储的范围 - 形成 范围链

    【讨论】:

    • 函数执行时创建执行上下文。函数创建时执行上下文尚未创建,它如何存储对当前执行上下文范围的引用?
    • 该函数获取对范围的引用,而不是(实际上尚未创建的)执行上下文。它从当前执行上下文中获取引用,其执行导致函数被创建。
    • @Bergi,什么时候创建函数?
    • @user51462 输入声明它的作用域,或计算定义它的表达式时。
    • @Bergi,很多关于执行上下文 (EC) 的文章将这个概念分为“创建阶段”和“执行/激活阶段”(例如,参见 here 和 @ 987654322@)。我不确定这是否是考虑 EC 的正确方法(因为在当前或过去的规范中没有提到这些阶段),但是当你说“函数已创建”时,你指的是所谓的EC的“创建阶段”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多