跳至主要內容
es6新特性

变量声明 let、const

箭头函数 =>

  • 自身不绑定this,this指向当前上下文
  • 不能作为构造函数
  • 没有arguments,用rest

模板字符串 ${}

函数参数默认值

对象结构

扩展运算符 ...

对象属性简写

Promise

  • 概念

    Promise 本身是同步的立即执行函数, 当在 executor 中执行 resolve 或者 reject的时候, 此时是异步操作,会先执行then/catch等,当主栈完成后, 才会去调用 resolve/reject 中存放的方法执行。

  • async/await

    async 函数返回一个 Promise 对象,当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再执行函数体内后面的语句。可以理解为,是让出了线程,跳出了 async 函数体。

    Async/Await 就是一个自执行的 generate 函数。利用 generate 函数的特性把异步的代码写成“同步”的形式,第一个请求的返回值作为后面一个请求的参数,其中每一个参数都是一个 promise 对象.

  • 静态方法

    • Promise.all 所有成功才执行then,有一个失败后面都会被忽略并执法catch
    • Promise.race 拿到最快的看是then还是catch
    • Promise.allSettled 所有执行完毕,返回包含了每个promise结果的对象数组 [{ status: "fulfilled", value: 3 }, { status: "rejected", reason: "foo" }]
    • Promise.any 有成功就执行then,输出第一个成功的,所有失败才执行catch ES2021

狮子...大约 2 分钟面试JavaScript
手写代码

防抖 && 节流

防抖

在一段时间内,事件只会触发一次


狮子...大约 7 分钟面试手写代码JavaScript
Event Loop事件循环

参考文章

省流总结

Js是一门单线程语言,当js执行的时候,主线程就会形成一个函数执行栈,首先去执行同步任务,遇到异步任务(宏/微,宏任务会在同步任务执行完之后执行,而微任务会在当前宏任务执行完之后立即执行。) 分别放到宏/微任务队列,当函数执行栈为空时,开始处理微任务队列,待清空后取宏任务队列中的第一项进入执行栈,待清空后又开始查看微任务队列是否有任务,如此反复循环直到清空所有任务。


狮子...大约 2 分钟面试JavaScript
Map和Set

狮子...小于 1 分钟面试JavaScript
var和let和const
  • 定义

    • var定义的变量;
    • let定义的变量;
    • const定义的常量
  • 作用域

    • var作用域是整个封闭函数,是全域的;
    • let作用域是在块级或者字块中;
    • const跟let一样作用于块级作用域
  • 变量提升

    • 不论通过var声明的变量处于当前作用于的第几行,都会提升到作用域的最顶部;var完成了声明和初始化,初始化的值为undefined;function完成声明、初始化和赋值;
    • 只要块级作用域内存在let,它所声明的变量就会绑定在这个区域,但是let声明的变量不会在顶部初始化,解析let那一行才初始化或者初始化和赋值,凡是在let声明之前使用该变量都会报错not defined,称为暂时性死区
    • const没有变量提升,声明时必须初始化(赋值),重复声明会报错,声明的常量不可改变
  • 重复声明

    • 同一作用域内,var可以
    • 同一作用域内,let不可以
    • 同一作用域内,const不可以
  • 内存分配

    • var会先直接在栈内存分配内存空间,等执行实际语句的时候,再存储对应变量,如果是引用类型,那么会在堆内存开辟一个空间,栈内存指针指向堆内存;
    • let不会预分配,而且会检查,相同变量名则报错;
    • const也不会预分配,const不可修改,但可以修改对象里的属性

狮子...大约 1 分钟面试JavaScript
作用域和作用域链

作用域

作用域:作用域是可访问变量的集合。
每一个变量、函数都有其作用的范围,超出作用不得使用,这个叫做作用域。

作用域链

访问一个变量时,会从当前作用域查找,如果当前作用域没有查找到就会向上级作用域查找,直到查到全局作用域,这个查找的过程形成的链式连接叫做作用域链。 (函数内部可以读取函数外部的变量,函数外部不能读取函数内部的变量,就是根据作用域链。)


狮子...小于 1 分钟面试JavaScript
原型和原型链

原型

JavaScript 中,有普通对象(new出来的)和函数对象,Object ,Function 是JS自带的函数对象。每个对象都有原型(null和undefined除外),可以把它理解为存放对象的默认属性和方法的一个对象。比如Object的原型就是一个Object对象,它里面存在着一些对象的方法和属性,例如最常见的toString方法。再比如说Array也是一个函数对象,它的原型就是Array.prototype,它里面存在着一些数组的方法和属性,例如常见的filter,find,map,push等方法。

原型链


狮子...大约 2 分钟面试JavaScript
垃圾回收

垃圾回收策略

标记清除

标记清除:标记阶段即为所有活动对象做上标记,清除阶段则把没有标记(也就是非活动对象)销毁。


狮子...大约 4 分钟面试JavaScript
数据类型

种类

  • undefined
  • null
  • number
  • boolean
  • string
  • object
  • symbol(表示独一无二的值,定义对象唯一属性)
  • bigint(表示任意大小的整数)

检测方案

typeof

typeof:能判断所有值类型,函数。不可对 null、对象、数组进行精确判断,因为都返回 object

typeof
typeof

狮子...小于 1 分钟面试JavaScript
Array数组方法

不改变数组

Array every()

every() 方法检查数组中的所有元素是否都通过了测试(被作为函数提供)。

every() 方法对数组中存在的每个元素执行一次函数:

- 如果找到函数返回 false 值的数组元素,every() 返回 false(并且不检查剩余值)
- 如果没有出现 false,every() 返回 true

注释:every() 不对没有值的数组元素执行函数。

Array some()


狮子...大约 4 分钟面试JavaScript
2