执行上下文和执行栈

执行上下文

javaScript 的代码都是在执行上下文中运行的。
执行上下文指当前环境下的变量,函数声明,作用域链和this对象等信息。

执行上下文的生命周期

创建阶段:
生成变量对象,建立作用域链,确定this的指向
执行阶段
赋值变量,函数的引用,执行其他代码

变量对象

变量对象是与执行上下文相关的数据作用域,存储了执行上下文中的变量和函数声明。
变量对象是一个抽象概念,当在全局执行上下文中时,变量对象就是全局对象 。

执行栈

一种先进后出的数据结构,用来存储代码运行的所有上下文。

  1. 当浏览器第一次遇到js代码时,会创建一个全局上下文并且压入当前栈中。
  2. 每遇到一个函数调用,会创建一个新的执行上下文,并压入栈中。
  3. 函数执行结束后,执行上下文从当前栈中弹出,进入到当前栈中的下一个上下文。
  4. 一旦所有代码执行结束,js引擎从当前栈中移除全局执行上下文。

全局、函数和Eval执行上下文

1.全局执行上下文,(全局在浏览器环境下指的是window)
2.函数执行上下文,每当一个函数创建时,就会创建一个新的执行上下文。
3.eval 函数执行上下文,eval(‘1’ + ‘2’)
每个上下文都有三个重要属性:变量对象,作用域链,this

执行上下文特点:

单线程,只在主线程上执行
同步执行,代码至上而下执行。
全局上下文只有一个,就是window对象。
每执行一个函数,都会创建一个新的执行上下文。

参考文献

「历时8个月」10万字前端知识体系总结(基础知识篇)

你可能感兴趣的:(javascript,前端)