【Day8】深入理解JS | 青训营笔记

24 阅读2分钟

1、JS的基本概念

  • 诞生

    • 借鉴C语言的基本语法

    • 借鉴Java语言的数据类型和内存管理

    • 借鉴Scheme语言,将函数提升到“第一等公民”的地位

    • 借鉴Self语言,使用基于原型(prototype)的继承机制

image.png image.png

  • 数据类型

image.png

  • 作用域

    • 变量的可访问性和可见性

    • 静态作用域,通过它就能够预测代码在执行过程中如何查找标识符

      image.png
  • 变量提升

    • var有变量提升

    • let、const没有变量提升,提前访问会报错

    • function函数可以先调用再定义

    • 赋值给变量的函数无法提前调用

      image.png
      image.png

2、JS怎么执行的

image.png image.png

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

    image.png
    • 全局执行上下文:代码开始执行时就会创建,将他压执行栈的栈底,每个生命周期内只有一份

    • 函数执行上下文:当执行一个函数时,这个函数内的代码会被编译,生成变量环境、词法环境等,当函数执行结束的时候该执行环境从栈顶弹出

    image.png image.png
    • 词法环境:基于ECAScript代码的词法嵌套结构来定义标识符和具体变量和函数的关联。一个词法环境由环境记录器和一个可能的引用外部词法环境的空值组成

    • 变量环境和词法环境的一个不同就是前者被用来存储函数声明和变量(let和const)绑定,而后者只用来存储var变量绑定

    • Outer:指向外部变量环境的一个指针

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

    • 绑定This

    • 创建词法环境

    • 创建变量环境

image.png image.png image.png

3、JS进阶知识点

  • 闭包

    • 如果引用闭包的函数是一个全局变量,那么闭包会一直存在直到页面关闭,但是如果这个闭包以后不再使用的话,就会造成内存泄漏。

    • 如果引用闭包的函数是一个局部变量,等函数销毁后,在下次JavaScript引擎执行垃圾会收拾,判断闭包这块内容如果已经不再被使用了,那么JavaScript引擎的垃圾回收器就会回收这块内存。

image.png

  • this

image.png

  • 垃圾回收

image.png