美文网首页
JS 作用域和执行上下文[1] — 区别

JS 作用域和执行上下文[1] — 区别

作者: 弱冠而不立 | 来源:发表于2020-10-04 15:37 被阅读0次

    参考文章:
    [译] 理解 JavaScript 中的执行上下文和执行栈
    彻底明白作用域、执行上下文
    JavaScript 执行上下文和执行栈
    深入理解 JavaScript 作用域和作用域链
    谈谈 JavaScript 的作用域

    经常混淆作用域和执行上下文的概念,误认为它们是相同的概念,但事实并非如此。
    JavaScript 属于解释型语言,JavaScript 的执行分为:解释和执行两个阶段。

    • 解释阶段:
      • 词法分析
      • 语法分析
      • 作用域规则确定
    • 执行阶段:
      • 创建执行上下文
      • 执行函数代码
      • 垃圾回收

    JavaScript 解释阶段便会确定作用域规则,因此作用域在函数定义时就已经确定了,而不是在函数调用时确定,但是执行上下文是函数执行之前创建的。执行上下文最明显的就是 this 的指向是执行时确定的。而作用域访问的变量是编写代码的结构确定的。

    作用域和执行上下文之间最大的区别是:
    执行上下文在运行时确定,随时可能改变;作用域在定义时就确定,并且不会改变。

    总结:
    一个作用域下
    可能包含若干个上下文环境;(全局作用域下有若干个函数被调用)
    有可能从来没有过上下文环境;(函数从来就没有被调用过)
    有可能有过(现在函数被调用完毕后,上下文环境被销毁了);
    有可能同时存在一个或多个(闭包)。
    同一个作用域下,不同的调用会产生不同的执行上下文环境,继而产生不同的变量的值。

    相关文章

      网友评论

          本文标题:JS 作用域和执行上下文[1] — 区别

          本文链接:https://www.haomeiwen.com/subject/euqdjktx.html