执行上下文
定义
- 执行上下文就是当前JavaScript代码被解析和执行时所在环境的抽象概念,JavaScript中运行任何代码都是在执行上下文中运行,执行上下文共三种类型
- 是JavaScript 执行代码的环境
- 创建执行上下文时会进行this绑定、创建词法环境和变量环境
分类
- 全局执行上下文:默认的、最基础的执行上下文,不在任何函数中的代码都位于全局执行上下文中
- 创建一个全局对象,在浏览器中这个全局对象就是window对象(非严格模式)
- 将this指针指向这个全局对象,一个程序中只能存在一个全局执行上下文
- 函数执行上下文:每次调用函数时,都会为该函数创建一个新的执行上下文,每个函数都拥有自己的执行上下文,但是只有在函数被调用的时候才会被创建,一个程序中可以存在任意数量的函数执行上下文。每当一个新的执行上下文被创建,它都会按照特定的顺序执行一系列步骤
- eval函数执行上下文:可以将字符串直接编译执行,运行在eval函数中的代码也有自己的执行上下文,但是一般不通过eval进行开发
eval("console.log('这是eval')");//"这是eval"
var str = function() {
var b = 10;
console.log(b);
}
eval("str()");//10
作用域
定义
- JavaScript解释阶段便会确定作用域规则,因此作用域在函数定义时就已经确定了,而不是在函数调用时确定,是编写代码时定义的变量和函数的作用域
- 作用域就是一个独立的区域,它可以让变量不会向外暴露出去。作用域最大的用处就是隔离变量。内层作用域可以访问外层作用域。一个作用域下可能包含若干个执行上下文
- 作用域在定义时就确定,并且不会改变
词法环境
定义
- 指相应代码块内标识符与变量值、函数值之间的关联关系的一种体现。词环境内部包含环境记录器和对外部环境的引用。环境记录器是存储变量和函数声明的实际位置,对外部环境的引用意味着可以访问父级词法环境
总结
- javaScript属于解释型语言,JavaScript的执行分为解释和执行两个阶段
- 解释阶段:
- 词法分析
- 语法分析
- 作用域的规则确定
- 执行阶段:
- 创建执行上下文
- 执行函数代码
- 垃圾回收
- JavaScript解释阶段便会确定作用域规则,因此作用域在函数定义时就已经确定了,而不是在函数调用时确定,但是执行上下文是函数执行之前创建的。执行上下文最明显的就是this的指向是执行时确定的。而作用域访问的变量是编写代码的结构确定的
-------------------------------------------------------------------------------2024.5.20每日一题