js编译器相关概念

一、执行上下文:
 
所谓执行上下文就是js代码的执行环境。
 
js引擎先编译,再解释执行代码。编译时会找到所有的标识符,做变量和函数声明提升。我们习惯将var a = 2; 看作一个声明,而实际上JavaScript 引擎并不这么认为。它将var a 和a = 2 当作两个单独的声明,第一个是编译阶段的任务,而第二个则是执行阶段的任务,js引擎在执行时如果遇到全局变量,则放入全局执行上下文中,如果是函数调用代码则产生一个函数执行上下文。
一个执行上下文由变量环境(var和function)、词法环境(let const)、外部执行上下文引用环境、this这四部分组成。
 
二、词法作用域:
词法作用域由代码中标识符(变量、函数)声明的位置来决定,是静态的作用域,JS引擎在编译阶段通过它可以预测代码在执行过程中如何查找标识符。
 
三、调用栈:
 
管理多个执行上下文,维护函数之间的关系。全局执行上下文始终位于栈底。
 
四、作用域:

作用域是一套规则,用于确定在何处(LHS)以及如何查找标识符(变量、函数)(RHS)。如果查找的目的是对变量进行赋值,那么就会使用LHS 查询;如果目的是获取变量的值,就会使用RHS 查询。

赋值操作符会导致LHS 查询。=操作符或调用函数时传入参数的操作都会导致关联作用域的赋值操作。

LHS找不到时,如果处于非严格模式则在全局作用域中创建一个,严格模式下报错。

RHS找不到时则直接报错

 
五、作用域链:
主要用于变量查找。每个执行上下文都有一个外部执行上下文的引用(outer),当访问一个变量时先在当前执行上下文的变量对象中查找,如果找不到就到outer执行上下文的变量对象中查找,如果找不到,则继续向上查找(如果有的话)。
 

 

posted @ 2022-03-10 15:51  我是格鲁特  阅读(166)  评论(0编辑  收藏  举报