JS是怎么执行的
当JS引擎解析到可执行代码片段(通常是函数调用)的时候,就会先做一些执行前的准备工作, 这个准备工作,就叫做“执行上下文( execution context简称EC)”,也叫执行环境 ,它包括 this 的值、变量、对象和函数。
执行上下文的创建过程
- 确定 this 如何绑定 (This Binding)
- 词法环境(Lexical Environment)
- 变量环境(Variable Environment)
可能不太好理解,于是我搜了一下其他文章,可以帮助理解一下 [核心概念] 一文说透 JS 中的执行上下文 - 掘金 (juejin.cn)
- 全局执行上下文:代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份
- 函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈顶弹出
创建执行上下文的时候做了什么?
- 绑定This 全局执行上下文中,this 的值指向全局对象 在函数执行上下文中,this 的值取决于函数的调用方式例如:
- 创建词法环境
- 创建变量环境
function A(){
console.log(this)
}
var p=A();
- 词法环境:基于ECMAScript代码的词法嵌套结构来定义标识符和具体变量和函数的关联。一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成
- 变量环境:变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量(let 和const)绑定,而后者只用来存储var变量绑定
- Outer:指向外部变量环境的-一个指针
JS垃圾回收
- 垃圾回收原理 Java和JavaScript都是是使用垃圾回收的语言,也就是说执行环境负责在代码执行时管理内存,通过自动内存分配管理实现内存分配和闲置资源回收。 基本思路很简单: 确定哪个变量不再使用,然后释放它占用的内存
- 标记清理(主要使用) Java和JavaScript最常用的垃圾回收策略就是标记清理。 当变量进入上下文,比如在函数内部声明一个变量,这个变量会被加上存在于上下文中的标记,当变量离开上下文时会被加上一个离开上下文的标记。 ...
- 引用计数(了解) 对于Java和JavaScript常用的变量标记策略都是 标记-清理 策略,这里简单介绍以下引用计数的原理。 原理很简单:其思路是 对每个值都记录它被使用的次数
Javascript的垃圾回收机制知多少? - 掘金 (juejin.cn) 上面这篇文章介绍了垃圾的产生,以及回收机制,感兴趣的小伙伴可以看看