美文网首页
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