美文网首页
浅拷贝深拷贝,防抖节流

浅拷贝深拷贝,防抖节流

作者: Rebirth_914 | 来源:发表于2023-04-22 10:54 被阅读0次

1.浅拷贝 创建一个新对象,这个对象有原始对象属性值的一份精确拷贝,如果是基本数据类型,拷贝的就是基本类型的值,如果是引用数据类型,拷贝的就是内存地址
2.深拷贝和浅拷贝最大的区别是:拷贝引用数据类型时,拷贝的不是内存地址而是要从堆内存中开辟一个新的区域存放新对象,彼此完全独立

3.防抖(等用户高频事件完了再进行事件操作)


设计思路
function debounce(delay, callback) {
    let timer;
    // timer 变量需要一直保存在内存当中 闭包
    return  (value)=> {
      clearTimeout(timer); //清除之前触发的定时器
      timer = setTimeout(() => {
        callback(value);
      }, delay);
    };
  }
  function fn(value) {
    console.log('value', value);
  }
  const debounceFunc = debounce(1000, fn);
  const input = document.getElementById('input');
  input?.addEventListener('keyup', (e) => {
    debounceFunc(e.target?.value);
  });
  • 应用场景
    (1)search搜索联想,用户在不断输入值时,用防抖来节约请求资源
    (2)window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次

4.节流
防抖存在一个问题,事件会一直等到用户完成操作后一段时间在操作,如果一直操作,会一直不触发。比如说是一个按钮,点击就发送请求,如果一直点,那么请求就会一直发布出去。这里正确的思路应该是第一次点击就发送,然后上一个请求回来后,才能再发。

节流就是减少流量,将频繁触发的事件减少,并每隔一段时间执行。即,控制事件触发的频率

总结:某个操作希望上一次的完成后再进行下一次,或者希望隔一段时间触发一次。

function throttle(func, wait) {
    let timeOut;
    return () => {
      if (!timeOut) {
        // 如果timeOut有值就不执行
        timeOut = setTimeout(() => {
          func();
          timeOut = null;
        }, wait);
      }
    };
  }
  function handle() {
    console.log(Math.random());
  }
  document.getElementById('button')!.onclick = throttle(handle, 2000);
  • 应用场景
    (1)鼠标不断点击触发,mousedown(单位时间内只触发一次)
    (2)监听滚动事件,比如是否滑到底部自动加载更多

总结

  • 防抖和节流相同点:
    防抖和节流都是为了阻止操作高频触发,从而浪费性能。

  • 防抖和节流区别:
    防抖是触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间。适用于可以多次触发但触发只生效最后一次的场景。
    节流是高频事件触发,但在n秒内只会执行一次,如果n秒内触发多次函数,只有一次生效,节流会稀释函数的执行频率。

相关文章

  • 面试总结之基础篇(1)

    深拷贝与浅拷贝 原型与原型链 防抖节流 this 指向 new关键字 深度剖析js闭包

  • 笔试题

    实现一个new的伪代码 深拷贝和浅拷贝 防抖节流 call apply bind 原型继承 组合继承 寄生组合继承

  • 前端手写

    节流 防抖 用xhr手写axios 函数柯里化 手写promise 手写reduce new 深拷贝 string...

  • 准备:深拷贝、防抖、节流

    深拷贝 JSON 转换 如果对象中有函数、undefind,无法拷贝出 普通递归函数实现 防抖 防抖的原理就是:触...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

  • 手写实现系列

    实现 new 方法 Object.create 的实现原理 实现数据绑定 深拷贝 防抖函数 节流函数 冒泡排序 快速排序

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

网友评论

      本文标题:浅拷贝深拷贝,防抖节流

      本文链接:https://www.haomeiwen.com/subject/lmbaddtx.html