1.执行上下文
分类:{
全局执行上下文
函数执行上下文
eval函数执行上下文
}
执行栈:{
执行栈就是“调用栈”,是一种LIFO(先进先出)的数据结构域
用于存储代码运行的执行上下文
当引擎在执行脚本时,先创建全局执行上下文压入栈
当引擎调用一个函数时,会为该函数创建执行上下文压入栈顶部
引擎会先执行执行上下文在顶部的函数,执行后,会弹出,然后控制流程会到达当前执行上下文的下一个上下文
一旦所有代码执行完毕,js引擎从执行栈中移除全局执行上下文
}
2.作用域链
作用域2种工作模型:{
词法环境:es6之前的作用域链,作用域链由词法环境决定,js采用
变量环境
}
作用域链:{
作用域:就是隔离变量,分为全局作用域、方法作用域、块级作用域
作用域链:变量查找,从当前作用域一层一层向上查找,就是作用域链
}
3.比较
js执行:{
解释阶段:词法分析、语法分析、作用域规则确定
执行阶段:执行上下文、执行函数代码
}
作用域和执行上下文区分:{
作用域在代码定义就确定了,执行上下文是在代码执行生成
作用域访问的变量是编写代码确定的,执行上下文访问的this是运行时确定
作用域中可能有多个执行上下文
同一作用域,不同调用会产生不同的执行上下文
}
执行上下文和作用域链