深入理解JS|青训营笔记

35 阅读2分钟

01JS的基本概念

微信图片_20230509220254.jpg GUI线程把页面上的内容绘制出来。

  • JS:单线程(GUI和JS互斥)
  • 动态、弱类型(动态语言:运行时才能确定数据类型的语言,变量在使用之前无需申明类型;静态语言:是编译时变量的数据类型就需要确定的语言)
  • 面向对象、函数式(可以混用)
  • 解释类语言、JIT
  • 安全、性能差
JS数据类型

复杂数据类型(对象):数组,函数。 基础数据类型:字符串,undefined,数字,null,symbol,biglnt,布尔。

作用域

变量的可访问性和可见性。静态作用域,通过它就能够预测代码在执行过程中如何查找标识符。

  • 全局作用域:函数或变量在全局都可以访问到
  • 函数作用域:函数或变量只能在函数内起作用
  • 块级作用域:一个块,在花括号内起作用
变量提升
  • var有变量提升
  • let、const没有变量提升,提问访问会报错
  • function函数可以先调用再定义
  • 赋值给变量的函数无法提前调用

02JS是这么执行的

微信图片_20230509224418.jpg

微信图片_20230509224843.jpg、 outer变量环境指针,指向这个执行上下文外层的函数的执行上下文。

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

创建执行上下文的时候做了什么:绑定this;创建词法环境;创建变量环境。

微信图片_20230509230010.jpg