深入理解JS | 青训营笔记

68 阅读2分钟

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执行过程

执行上下文

当JS引擎解析到可执行代码片段(通常是函数调用)的时候,就会先做一些执行前的准备工作,这个工作,就叫执行上下文(execution context 简称EC),也叫执行环境。

  • 全局执行上下文

    代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份

  • 函数执行上下文

    当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,等函数执行结束的时候该执行环境从栈顶弹出。

  • Eval执行上下文

执行上下文做了什么事?

  • 绑定This
  • 创建

JS进阶知识点

闭包

本质是一个没有被回收的对象

this

  • 普通函数this指向Window
  • 对象
    1. 对象调用指向对象
    2. 先赋值再调用,看调用的地方
  • new操作
    1. 创建临时对象
    2. 将this指向临时对象
    3. 执行构造函数
    4. 返回临时对象

垃圾回收

堆的垃圾回收

新生代空间:

  1. 垃圾标记
  2. 对象复制
  3. 区域反转

老生代空间:

新生代空间两轮还未被回收的对象加入老生代,垃圾回收机制同新生代垃圾回收机制。

事件循环

微任务队列和宏任务队列。微任务队列先于宏任务队列。

总结

图片内是课程中的主要内容,课程中主要讲解了JS区别于其他高级语言的特性,JS自身对于对象和函数的底层逻辑、垃圾回收的过程等,这些原理性知识对JS的执行过程和原理有很大帮助,帮助我快速理解JS特性。