学习执行上下文

什么叫 “执行上下文”(执行上下文环境)

在浏览器执行代码之前;会先做一些准备工作;例如把声明的变量和函数提升到全局最前面;

例如:

  console.log(a); // undefined

  var a = 10;

浏览器运行的过程大概如此:

  先做准备工作

  var a; // 先把a提升到最前面;然后再开始执行;所以这个时候a已经声明了但是还没有赋值,所以值为undefined;

  console.log(a);

  a = 10;

 

全局准备工作

  1.变量,函数表达式-----变量声明,默认赋值为undefined;

  2.this---赋值;(全局this)

  3.函数声明---赋值

这三种数据准备情况我们称为 “执行上下文” 或者 “执行上下文环境”

执行上下文环境分两种:全局和函数

函数每次被调用都会产生一个新的执行上下环境,因为每次都调用都有可能有不同的参数;

函数准备工作

  1.参数---赋值

  2.argument--赋值

  3.自由变量的取值作用域---

在js中多次调用函数,产生多个执行上下文环境;也出现一个名为“栈”的东西,“栈”---后进先出;执行上下栈;

整个过程是压栈和出栈;

例如:

  let a = 10, // 1.先进入全局上下文环境
        fn,
        bar = (x) => {
          let b = 5;
          fn(x + b); // 3.进入fn上下文环境
        };
    
    fn = (y) => {
      let c = 5;
      console.log(y + c);
    };

    bar(10); // 2.进入bar函数上下文环境
处于活动状态的上下文环境只有一个;

一开始是全局上下文环境是活动状态的;在运行过程中遇到了bar函数,然后创建bar函数的上下文环境并把他压入栈内,并设置为活动状态;

在运行bar函数时遇到fn函数,创建fn的上下文环境,并压入栈内,设置为活动状态;在fn执行完后出栈并销货;然后回到bar函数,也是执行完后并销毁;

 

posted @ 2021-06-08 11:40  sky-su  阅读(67)  评论(0)    收藏  举报