今天主要讲一下,JS底层的一些东西,这些东西不太好举例(应该是我水平不够)html
望你们多多海涵,比心心web
执行环境(执行上下文,全文使用执行环境 )是JS中最为重要的一个概念,执行环境决定了,变量或函数有权访问的其余数据,并决定了其各自行为。编程
跟执行环境直接相关的是变量对象 数组
JS在执行环境中定义的全部变量和函数都保存在该对象上。浏览器
对于该对象,咱们没法使用代码来进行访问,可是JS解析器在进行数据处理时会在后台对该变量对象进行访问。数据结构
全局执行环境是JS代码的最外围的执行环境,在JS脚本执行时建立,脚本执行完成后销毁编程语言
全局执行环境根据宿主环境(即JS的运行环境)的不一样而有所区别函数
在web浏览器中全局执行环境被认为是window对象,因此全部的全局变量、函数都是做为window对象的属性和方法建立的(Es6中的 let、const声明的变量不会做为window对象的属性和方法)this
执行环境中的全部代码执行完成后保存在其中的全部变量、函数定义也都会随之销毁。spa
这也是this指针默认的指向
每次进行函数的调用时,都会为该函数建立一个新的执行环境,而后JS会执行该执行环境的代码,具体规则一下子讲述。
Eval函数可让JS开发人员动态地生成,并执行脚本,传入一个字符串后,会被该函数解析为可执行的JS代码,并执行
关于上述的执行环境的执行顺序就涉及到了另外一个概念
执行栈在其它的编程语言中一般被称为调用栈,执行栈中保存了代码执行期间建立的全部执行环境
学过数据结构的朋友应该知道,栈是一个后进先出的结构
执行环境的执行顺序以下:
1.当JS引擎首次读取JS脚本时会建立全局执行环境,并将全局执行环境推入执行栈
2.每当函数被调用时,建立的函数执行环境会被推入执行栈,成为执行栈 的栈顶元素,执行栈移交控制权给该执行环境
3.JS引擎会运行执行栈中栈顶的执行环境中的代码
4.执行栈弹出已执行完的执行环境,将控制权交给目前栈顶的执行环境
5.弹出全局执行环境,浏览器关闭
我已经介绍了JS是如何管理执行环境的
下面我将介绍JS是如何建立执行环境的
上述过程你们能够参照下图,可能不太准确但仍是能够帮助你们理解
执行环境的内容大概就是这些,明天更新做用域、做用域链相关内容