JavaScript

堆和栈的区别

  • 栈内存:基本类型会存放在栈内存中,存取方式为先进后出。
  • 堆内存:引用类型会存放在堆内存中

数据类型判断方式

  • **typeof **
  • instanceof
  • Object.prototype.toString.call(obj)

什么是闭包?如何实现闭包

闭包就是在函数外部访问函数内部的变量

在函数内部返回另一个函数,返回的函数中将函数内的变量返回

什么是原型和原型链

  • 原型:每个实例对象都有自己的原型,也就是构建自己的原型对象
  • 原型链:当查找某个属性的时候会先在对象本身查找,没有再从原型上找

什么是深拷贝和浅拷贝,如何实现?

  • 浅拷贝:将对象或数组赋值给新对象时,赋值引用关系,修改新对象原来对象也会跟着变
  • 深拷贝:将对象或数组赋值给新对象时,是创建一个新的对象,和之前的没有引用关系,修改新对象原来对象不会变。

事件循环机制(微任务、宏任务)

  • JS是单线程的
  • 先执行同步代码,然后执行微任务,再渲染dom,最后执行宏任务。
  • 微任务:Promise
  • 宏任务:setTimeout、setInterval

This指向

  • this指向的是调用者
  • 没有调用者的时候默认是window对象,有调用者的时候this指向调用者
  • 普通函数的this指向的是调用者,没有调用者默是window
  • 箭头函数的this指向的是函数作用域的对象

内存(垃圾)回收机制GC

  • JavaScript是自动的垃圾回收机制,会根据算法找出不再引用的变量或属性,Js会释放掉。
  • 当创建一个对象或数组时会占用内存,不再使用时需要置为null

call, alpay,bind的区别

  • 作用相同,都是可以改变this指向
  • call和appaly是直接执行该函数,bind方法执行后返回该函数,需要再多加一个()执行。
  • 第一个参数都是this的指向对象, 第二个参数call和bind是挨个放进去,apply是数组

ES6

let const、var的区别

  • let: 只在作用域内可访问,可以修改
  • const:只在作用域内可访问,不可修改
  • var:全局作用域,可修改

Promise

  • Promise是为了解决链式调用的问题
  • 通过new Promise可以创建一个Promise对象, Promise有三种状态,请求中pending,请求成功resoved, 请求失败rejected
  • 在Promise中可以执行异步请求,使用resolve返回正常的值,reject返回错误的值, 通过then方法接收返回的值,通过catch方法捕捉错误内容
  • Promise.all方法可以同时执行多个异步请求,全部请求成功才会返回成功,其中有一个失败就会返回失败

Class类

  • Class是面向对象语法的实现
  • 构造函数:通过constructor构造函数进行构建对象的属性
  • 继承:通过extends关键字实现继承,通过super执行父类的构造函数并传递初始化参数

async await

  • 将异步函数改为同步写法
  • 使用async在函数名前声明,在函数内的异步方法前添加await

Es6常用方法

  • map、find、filter、reduce、every
  • 箭头函数,扩展运算法、模板字符串
  • Object.keys、Object.values