深入理解JS丨青训营笔记

58 阅读2分钟

JS的基本概念

  • 单线程
  • 动态,弱类型
  • 面向对象、函数式
  • 解释类语言、JIT
  • 安全、性能差

JS的数据类型

数据类型分为复杂类型和基础类型

复杂类型里有对象由分为数组和函数等

基础类型里有字符串,undefined,数字,null,symbol,bigint和布尔

作用域

作用域中分为静态作用域,全局作用域,函数作用域,块级作用域

变量提升

  • var有变量提升
  • let、const没有变量提升,提前访问会报错
  • function函数可以先调用再定义
  • 赋值给变量的函数无法提前调用

JS的执行过程

源代码通过词法分析生成AST树,语法分析生成执行上下文,AST再转换成字节码,字节码逐行解释执行成机器码,字节码编译执行生成机器码.

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

执行环境又分为全局执行上下文,函数执行上下文和Eval执行上下文.

  • 词法环境:基于ECMASript代码的词法嵌套结构来定义标识符和具体变量和函数的关联.一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成
  • 变量环境:与前者的一个不同是,前者是用来存储函数声明和变量(let和const)绑定,而后者只能用来存储var变量绑定
  • Outer:指向外部变量环境的一个指针

ESP:记录当前执行状态的指针

闭包(closure):一个函数执行后会返回一个新函数,然后赋值给新变量,然后新函数里调用到原函数里的变量,这些变量会形成一个对象,就是一个对象.

this

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

垃圾回收

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

事件循环

  1. 同步任务
  2. 微任务
  3. 宏任务

感想

通过这节课,我复习了很多js的知识,也对很多细碎的知识点有了认识,感想老师~