什么是正则表达式
-
正则表达式是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象
-
通常用来查找、替换那些符合正则表达式的文本,许多语言都支持正则表达式
元字符
-
边界符
-
正则表达式中的边界符(位置符)用来提示字符所处的位置,主要有两个字符
边界符 说明 ^ 表示匹配行首的文本(以谁开始) $ 表示匹配行尾的文本(以谁结束)
-
作用域链
作用域链本质上是底层的变量查找机制。
-
在函数被执行时,会优先查找当前函数作用域中查找变量
-
如果当前作用域查找不到则会依次逐级查找父亲作用域直到全局作用域
垃圾回收机制
垃圾回收机制简称GC
JS中内存的分配和回收都是自动完成的,内存在不使用的时候会被垃圾回收器自动回收
内存的生命周期
JS环境中分配的内存,一般有如下生命周期:
-
内存分配:当我们声明变量、函数、对象的时候,系统会自动为他们分配内存
-
内存使用:即读写内存,也就是使用变量、函数等
-
内存回收:使用完毕,有垃圾回收器自动回收不再使用的内存
-
全局变量一般不会回收
-
一般情况下局部变量的值,不用了,会被自动回收掉
内存泄漏:程序中分配的内存由于某种原因程序未释放或无法释放叫做内存泄漏
闭包
闭包作用:封闭数据,提供操作,外部也可以访问函数内部的变量
箭头函数
箭头函数参数
-
普通函数有arguments动态参数
-
箭头函数没有arguments动态参数,但是有剩余参数...args
箭头函数this
在箭头函数出现之前,每一个新函数根据它是被如何调用的来定义这个函数的this值,非常令人讨厌。箭头函数不会创建自己的this,它只会从自己的作用域链的上一层沿用this。
实例成员&静态成员
实例成员:通过构造函数创建的对象称为实例对象,实例对象中的属性和方法称为实例成员(实例属性和实例方法)
静态成员:构造函数的属性和方法被称为静态成员(静态属性和静态方法)
Array
-
reduce执行过程:
-
如果没有起始值,则上一次值以数组的第一个数组元素的值
-
每一次循环,把返回值给做为下一次循环的上一次值
-
如果有起始值,则起始值作为上一次值
-
原型链
基于原型对象的继承使得不同构造函数的原型的对象关联在一起,并且这种关联的关系是一种链状的结构,我们将原型对象的链状结构关系称为原型链
原型链-查找规则
-
当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。
-
如果没有就查找它的原型(也就是proto指向的prototype原型对象)
-
如果还没有就查找原型对象的原型(object原型对象)
-
依次类推一直找到object为止(null)
-
proto对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线
-
可以使用instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上
防抖
防抖:单位时间内,频繁触发事件,只执行最后一次
使用场景:搜索框搜索输入、手机号、邮箱验证输入检测
节流
节流:单位时间内,频繁触发事件,只执行一次
使用场景:鼠标移动mousemove、页面尺寸缩放resize、滚动条滚动scroll等