js简要总结 | 青训营笔记

45 阅读2分钟

js的基本概念

特性

  • 创建:c的语法, java的内存管理和数据结构, schema函数作为一等公民, self原型继承
  • 单线程 异步, 动态 弱类型, 面向对象 函数式,解释类语言,性能

数据类型

  • 基础类型(存在于栈上): string number boolean, null undefined, bigInt, symbol
  • 引用类型(对象)(存在于堆上): array, function, object

作用域

  • 全局作用域, 函数作用域, 块级作用域
  • 变量提升: 预处理 var/function

js是怎么执行的

过程

  • 源代码->AST->字节码->机器码
  • 源代码分析为AST过程中创建执行上下文

执行上下文

  • 全局执行上下文, 函数执行上下文, Eval执行上下文
  • 执行上下文包括变量环境(let const 函数声明), 词法环境(var), outer(指向外部环境(根据作用域链)), this, 可执行代码
  • ESP会记录当前执行上下文

垃圾回收

  • 新生代
  • 老生代

js的进阶知识点

闭包

  • 嵌套函数中引用外部函数变量, 会创建一个closure变量存储引用的变量
  • 引用闭包的函数如果是全局变量,闭包不会被回收

this

  • 普通调用,指向global
  • 对象调用,指向调用的对象
  • call/apply/bind 指向传入的对象
  • new调用,指向新创建临时对象; (创建临时对象,this指向临时对象,执行构造函数,根据类型返回)

垃圾回收

  • 新生代空间(小,1-8M),分为对象区域和空闲区域,垃圾标记,对象复制,区域反转
  • 老生代, 标记清除, 主垃圾回收器会整理,期间js引擎停顿。

事件循环(浏览器)

  • 同步代码(执行栈)在主线程执行时,会把异步任务放入任务队列中(分为微任务队列和宏任务队列),然后执行完微任务队列,然后从宏任务队列取出宏任务调入主线程执行
  • 微任务有promise.then,object.observe; 宏任务有setTimeout,setInterval