一、设计模式
1、发布-订阅模式
vue响应式原理就涉及到发布-订阅模式
(1)是什么

(2)手写
见=》JavaScript手写题_Kw_Chng的博客-CSDN博客
二、块级作用域
可以嵌套多层,每一层块级作用域都不受其他作用域的影响
内层作用域可以定义外层作用域的同名变量
在块级作用域中,匿名立即执行函数表达式(匿名 IIFE)不再必要了
对于ES6的浏览器,函数声明类似于var,即会提升到全局作用域或函数作用域的头部,函数声明还会提升到所在的块级作用域的头部。其他环境中,块级作用域之中,函数声明语句的行为类似于let,在块级作用域之外不可引用。考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。
三、ES6声明变量的方法
6种,ES5中的var命令和function命令。ES6 除了添加let命令、const命令、import命令、class命令。
四、顶层对象globalThis
任何环境下,globalThis都是存在的,都可以从它拿到顶层对象,指向全局环境下的this
五、解构赋值
解构赋值允许等号左边的模式之中,不放置任何变量名
变量的解构赋值:
- “模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值
- 解构不成功,变量的值就等于
undefined - 不完全解构,即等号左边的模式,只匹配一部分的等号右边的数组。这种情况下,解构依然可以成功。
- 如果等号的右边不是数组(不是可遍历的结构,转为对象以后不具备 Iterator 接口,或本身就不具备 Iterator 接口),那么将会报错。
- 允许指定默认值
对象的解构赋值:
- 对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,变量的取值由它的位置决定;而对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
- 解构失败,变量的值等于
undefined - 可以将现有对象的方法,赋值到某个变量
- 对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。
- 由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构
字符串的解构赋值:
- 字符串被转换成了一个类似数组的对象,可以当成是数组的解构赋值
- 类似数组的对象都有一个
length属性,因此还可以对这个属性解构赋值
数值和布尔值的解构赋值:
- 解构赋值时,如果等号右边是数值和布尔值,则会先转为对象,利用Number.prototype.toString或Boolean.prototype.toString
函数参数的解构赋值:
- 对于传入的数组形式的参数,在传入参数的那一刻,数组参数就被解构成对应的变量
- 函数参数的解构也可以使用默认值
圆括号:
如果要将一个已经声明的变量用于解构赋值,将整个解构赋值语句,放在一个圆括号里面,就可以正确执行。声明变量不可使用圆括号,函数参数解构也不能带圆括号,赋值语句也不可带圆括号
结构变量的用途:
- 交换变量的值
- 从函数返回多个值:函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便
- 将一组参数与变量名对应起来
- 提取 JSON 数据
- 指定函数参数的默认值
- 遍历 Map 结构
- 输入模块的指定方法