标签
note
字数
433 字
阅读时间
2 分钟
JavaScript 是一门解释性语言,它的代码在执行前需要经历两个阶段:编译时和运行时
编译时 (Compile TIme)
在 JavaScript 中,编译时实际上是一个预处理阶段
在这个阶段, JS 引擎对代码进行的预处理操作包含:
- 词法分析和语法分析
- 词法分析:代码被分解为 tokens,即最小的语法单元
- 语法分析:tokens 被组合成语法书(AST)
- 变量和函数的声明提升 (Hoisting)
- 变量和函数会在代码执行前被提升到当前作用于的顶部,意味着可以在声明前使用它们
编译时并不会产生可执行的机器代码,而是转换为一种中间代码或者字节码
这个中间代码被保存在内存中,等待执行时机
运行时 (Run Time)
运行时阶段是代码的执行阶段,JS 引擎根据中间代码或字节码逐行解释执行
在这个阶段包含:
- 上下文的创建和管理
- 创建一个执行上下文,用于保存函数的作用域链、变量环境和调用栈等信息
- 类型检查和转换
- JavaScript 是一门动态类型语言,变量的类型是在运行时动态确定的
- 代码被逐行执行
- 变量会被赋值
- 函数被调用
- 根据数据和运算进行相应的计算和操作
此外,JS 引擎还会进行一些额外的操作,如 动态类型转换、垃圾回收 等
参考
- ChatGPT