JS | 知识点归纳

🌞 JavaScript 是一门解释型语言,没有编译阶段,所以它是动态类型

一、常见知识点理解

1、静态作用域&动态作用域

  • JavaScript并不具有动态作用域,它只有词法作用域,但是this机制某种程度上很像动态作用域

  • 静态作用域:静态作用域(即词法作用域)中的 函数 遇到既不是形参也不是函数内部定义的局部变量的变量时,会去 函数定义 时的环境中查询。

  • 动态作用域:动态作用域中的 函数 遇到既不是形参也不是函数内部定义的局部变量的变量时,到 函数调用 时的环境中查询。

2、This

  • 结合上面对作用域的理解,setInterval(),setTimeout() 方法是浏览器 window 对象提供,所以this指向window对象。
  • 箭头函数

3、函数

4、闭包

  • 本质就是上级作用域内变量的生命周期,因为被下级作用域内引用,而没有被释放。就导致上级作用域内的变量,等到下级作用域执行完以后才正常得到释放。

5、New操作符

6、关于宏任务与微任务


二、数据操作

1、判断值

  • 大通用:Object.prototype.toString.call(‘yf’).slice(8, -1) // String
  • 基本类型: typeof val === "function"(除了null, 可判断基本数据类型与function)
  • 数组:Array.isArray(value)
  • 对象、function: instanceof ( 原型链判断: [] instanceof Array 为true, 因为[].proto === Array.prototype )

2、常用原生方法

3、数值计算

4、数组去重

5、前端正则

6、对象拷贝

7、类型转换


三、性能相关知识点

1、为什么操作DOM慢

2、重绘与回流

3、防抖与节流

4、前端缓存

5、内存泄露

指内存没有被释放或者被垃圾回收,造成内存泄露的可能会有以下几种情况:

  • 监听在window/body等事件没有解绑
  • 模块形成的闭包内部变量使用完后没有置成null
  • 使用第三方库创建,没有调用正确的销毁函数

四、其他

1、JS数据存放位置

  • 原始类型:值存储于栈中
  • 引用类型:指针存储于栈中,值存储于堆中

2、valueOf与toString

  • valueOf: 返回对象的字符串,布尔,数值表示

  • toString: 返回对象的字符串表示

  • toString拓展:执行2.toString() 报错是S引擎无法确定 '.' 是浮点数还是 . 操作符, 恰当的做法是用括号包裹,如:(2).toString()

3、模块化规范

4、JavaScript实现千位分隔符