JS基本概念
JavaScript在1995年被Brendan Eich开发。
JS的基本概念
- 单线程
- 动态、弱类型
- 面向对象、函数式
- 解释类语言、JIT(Just-In-Time)
- 安全、性能差
数据类型
- 对象
- 数组
- 函数
- 基础类型
- 字符串
- 数字
- 布尔
- undefined
- null
- symbol
- bigInt
作用域
变量的可访问性和可见性
静态作用域:通过它就能够预测代码在执行过程中如何查找标识符。
- 全局作用域
- 函数作用域
- 块级作用域
变量提升
- var有变量提升
- let,const没有变量提升,提前访问会报错
- function函数可以先调用再定义
- 赋值给变量的函数无法提前调用
一段JavaScript代码-》编译阶段-》执行阶段
JS是如何执行的
AST(Abstract Syntax Tree)抽象语法树
执行上下文
当JS引擎解析到可执行代码片段(通常是函数调用)的时候,就会先做一些执行前的准备工作,这个工作,就叫执行上下文(execution context 简称EC),也叫执行环境。
-
全局执行上下文
代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份
-
函数执行上下文
当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,等函数执行结束的时候该执行环境从栈顶弹出。
-
Eval执行上下文
执行上下文做了什么事?
- 绑定This
- 创建
JS进阶知识点
闭包
本质是一个没有被回收的对象
this
- 普通函数this指向Window
- 对象
- 对象调用指向对象
- 先赋值再调用,看调用的地方
- new操作
- 创建临时对象
- 将this指向临时对象
- 执行构造函数
- 返回临时对象
垃圾回收
堆的垃圾回收
新生代空间:
- 垃圾标记
- 对象复制
- 区域反转
老生代空间:
新生代空间两轮还未被回收的对象加入老生代,垃圾回收机制同新生代垃圾回收机制。
事件循环
微任务队列和宏任务队列。微任务队列先于宏任务队列。
总结
图片内是课程中的主要内容,课程中主要讲解了JS区别于其他高级语言的特性,JS自身对于对象和函数的底层逻辑、垃圾回收的过程等,这些原理性知识对JS的执行过程和原理有很大帮助,帮助我快速理解JS特性。