JavaScript执行上下文

85 阅读2分钟
执行上下文:JavaScript代码被解析和执行的地方,只要JavaScript代码运行,它就一定运行在执行上下文中。

执行上下文分类:
  一、全局执行上下文:
    1、任何不在函数内部都属于全局执行上下文。
    2、浏览器会创建一个window对象。且this指向这个对象。
    3、一个程序中只有一个全局执行上下文。
  二、函数执行上下文:
    1、当函数被调用的时候会创建一个函数执行上下文。
    2、可以存在多个。
  三、Eval函数执行上下文:指得是运行在eval函数中的代码,很少用(了解即可);
执行上下文生命周期:
    1、创建阶段:
        创建变量对象:初始化函数的参数argument,提升函数声明和变量声明。
        创建作用域链:作用域链在变量对象后创建,作用域链包含变量对象,是为了解析变量对象的过程。
        确定this指向。
    2、执行阶段:
        变量赋值,代码执行。
    3、回收阶段:
        执行上下文出栈(先进后出,后进先出),等待虚拟机回收执行上下文。

执行上下文栈:
    1JavaScript代码执行时,首先创建一个全局执行上下文环境,把它压入执行栈的最底部。
    2、每次碰到一个函数,创建一个函数执行上下。压入执行栈中,(全局执行上下文的顶部);
    3、引擎会执行位于执行上下文顶部的函数,当函数执行完毕,当前函数执行上下文从执行栈中弹出,继续执行下一个上下文。
    4、所有函数执行上下文执行完毕,弹出全局执行上下文。


let a = 'Hello World!';
function first() {
  console.log('Inside first function');
  second();
  console.log('Again inside first function');
}
function second() {
  console.log('Inside second function');
}
first();
//执行顺序
//先执行second(),在执行first()