深入理解JS | 青训营笔记

42 阅读2分钟

JS的基本概念

诞生

1995年,Brendan Eich开发

  1. 借鉴C语言的基本语法
  2. 借鉴Java语言的数据类型和内存管理
  3. 借鉴Scheme语言,将函数提升到“第一等公民”(first class)的地位
  4. 借鉴Self语言,时使用基于原型(prototype)的继承机制

一些特性

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

函数提升

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

JS是怎么执行的

执行过程

  1. 编写源代码
  2. 源代码经过词法分析和语法分析分别形成AST和执行上下文
  3. AST进一步形成字节码
  4. 字节码经过逐行解释执行生成机器码
  5. 字节码也可以继续编译执行产生机器码,这个过程称为优化代码

执行上下文

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

分类:

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

创建执行上下文的时候做了什么

  • 绑定this
  • 创建词法环境
  • 创建变量环境

一些概念

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

JS的进阶知识点

this

  • 普通函数的this指向windows
  • 对象调用指向对象;先赋值再调用,看调用的地方
  • 创建临时对象;将this指向临时对象;执行构造函数;返回临时对象

垃圾回收机制

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

总结

JS作为前端三剑客的大头,是唯一的编程语言,故比其他两门语言都重要得多,需要更加深入的学习。