js

122 阅读3分钟

1、防抖和节流,应用场景

防抖和节流都是防止某一时间频繁触发,但是原理却不一样。 防抖是将多次执行变为只执行一次,节流是将多次执行变为每隔一段时间执行。 防抖(debounce): search搜索联想,用户在不断输入值时,用防抖来节约请求资源。 window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次 节流(throttle): 鼠标不断点击触发,mousedown(单位时间内只触发一次) 监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断

2、什么是闭包

「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。

3、继承有哪些方法

原型链继承
借用构造函数继承(伪造对象、经典继承)
实例继承(原型式继承)
组合式继承
寄生组合继承
es6继承 extends

4、什么是深/浅拷贝,有哪些实现方式

基本数据类型:string、number、boolean、undefined、null 引用数据类型:object、array、function JS数据类型分为基本数据类型和引用数据类型,基本数据类型保存的是值,引用类型保存的是引用地址(this指针)。浅拷贝共用一个引用地址,深拷贝会创建新的内存地址。 Object.assign:对象的合并 (第一级属性深拷贝,第一级以下的级别属性浅拷贝。) ES6中的 Object.assign(),第一个参数必须是个空对象。 Object.assign()方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。

    let obj1 = {
       a: { b: 1},
       c: 2
    }
    let obj2 = Object.assign({},obj1)
    obj2.a.b = 3;  //第二层,obj1变了,是浅拷贝
    obj2.c = 3;  //第一层,obj1不变,是深拷贝
    console.log(obj1);  
    console.log(obj2);
   

5、数组有哪些常用方法,引出下一个问题,slice和splice区别:

  1. splice改变原数组,slice不改变原数组。
  2. splice除了可以删除之外,还可以插入。
  3. splice可传入3个参数,slice接受2个参数。

6、Promise.all和Promise.race的区别,应用场景

Promise.all()可以将多个实例组装个成一个新实例,成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。 适用场景:比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。 promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。