[深入理解JS|前端青训营笔记]

18 阅读2分钟

[深入理解JS|前端青训营笔记]

  • JS的基本概念
  • JS的数据类型
  • 变量提升
  • 作用域
  • 闭包
  • 垃圾回收

JS的基本概念

1995年诞生,Bendan Eich开发

  1. 借鉴C语言的基本
  2. 借鉴Java语言的数据类型和内存管理
  3. 借鉴Scheme语言,将函数提升到“第一等公民”(first class)的地位
  4. 借鉴Self语言,使用基于原型(prototype)的继承机制
  • 单线程
  • 动态、弱类型
  • 面向对象、函数式
  • 解释类语言、JIT
  • 安全、性能差......
作用域:静态作用域、动态作用域

变量提升

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

JS是怎么执行的

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

  • 全局执行上下文:代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份
  • 函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈底弹出

课程总结

  1. JS 是单线程的,但是 Render 进程里面有多个线程
  2. JS 线程和 GUI 线程互斥,执行大的计算任务会导致页面卡顿
  3. 基础数据类型存在栈上,复杂数据类型存在堆上
  4. const、let没有变量提升,提前使用会报错
  5. JS也有编译的过程,执行之前会生成执行上下文
  6. 一个执行上下文包括变量环境、词法环境、 this 
  7. 变量环境里面有一个指向外部函数执行上下文的指针,形成了作用域链
  8. 全局执行上下文只有一份
  9. this 和执行上下文绑定