深入理解JS | 青训营笔记

44 阅读3分钟

一、JS的基本概念

1. JS的基本特征

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

2.作用域

  • 变量的可访问性和可见性
  • 静态作用域:通过它就可以预测代码在执行过程中如何查找标识符 image.png

3.变量提升

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

二、JS是如何执行的

1.执行流程

image.png

2.执行环境

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

3.执行上下文

image.png

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

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

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

三、补充

1.闭包

  • 通常,如果引用闭包的函数是一个全局变量,那么闭包会一直存在直到页面关闭;但如果这个闭包以后不再使用的话,就会造成内存泄漏。
  • 如果引用闭包的函数是个局部变量,等函数销毁后,在下次 JavaScript 引擎执行垃圾回收时,判断闭包这块内容如果已经不再被使用了,那么 JavaScript 引擎的垃圾回收器就会回收这块内存

2.this

  • 普通函数的this指向windows
  • 对象调用指向对象
  • 先赋值再调用,看调用的地方

步骤:

  • 创建临时对象
  • 将this指向临时对象
  • 执行构造函数
  • 返回临时对象

四、总结

本节课主要讲述了JS的整体发展及一些比较重要的知识。其中通过一些简单的代码讲述了变量提升、JS的数据是怎么存储的、基础数据类型和复杂数据类型的区别等一些基础知识,也讲解了JS的执行、闭包、垃圾回收等一些稍微进阶一些的知识,知识点较多,需要进一步学习,加深理解。