首页 > 其他分享 >前端面试经验之手写节流

前端面试经验之手写节流

时间:2024-11-20 23:19:06浏览次数:3  
标签:定时器 return 节流 timer 面试 time 手写 fn 函数

思路:

        第一步:直接封装方法。接收2个参数(fn:执行函数, time:设置默认执行时间)

        第二步:声明定时器变量

        第三步:return 函数,函数内部里假设有定时器就 return。没定时器就给定时器赋值延迟定时器,时间为 time

        第四步:延迟定时器函数里用 apply 执行 fn,传入 this 事件源,arguments 接收剩余参数。然后清空定时器

        第五步:使用示例

1.js 代码部分
 
// 封装防抖函数,接收执行函数,执行时间
function throttle(fn, time = 500) {
 
    // 定时器变量
    let timer = null
 
    // 返回函数
    return function() {
        
        // 假设有定时器就继续执行
        if(timer) return
 
        // 如果没定时器就给定时器赋值,时间为 time
        timer = setTimeout(() => {
 
            // 用 apply 执行传进来的函数,this 为事件源,arguments 接收剩余参数
            fn.apply(this, arguments)
 
            // 清除定时器
            timer = null
 
        }, time)
    }
}
 
 
 
// 使用实例
 
const div = document.querySelector('.box')
 
div.addEventListener('drag', throttle(function(e) {
  console.log(e.pageX, e.pageY)
}, 1000))
.html 部分

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .box {
      width: 100px;
      height: 100px;
      border: 1px solid red;
      text-align: center;
      line-height: 100px;
    }
  </style>
</head>
<body>
  <div class="box" draggable="true">可拖拽</div>
  <script src="/throttle.js"></script>
</body>
</html>

标签:定时器,return,节流,timer,面试,time,手写,fn,函数
From: https://blog.csdn.net/2301_78901139/article/details/143927905

相关文章

  • 面试题精选04-使用Linq怎么将数据分组之后按时间排序取最新1条数据
    实体类publicclassMovie{publicstringName{get;set;}publicstringArea{get;set;}publicDateTimeProductTime{get;set;}}初始化数据publicstaticList<Movie>InitData(){List<Movie>data=newList<Movie>()......
  • 面试题精选03-单例服务内使用作用域服务会存在什么问题
    存在的问题由于单例服务的生命周期远远超过作用域服务的生命周期,因此可能会在作用域服务被销毁后,尝试使用已经不再有效的服务实例。解决办法不在单例服务内直接使用作用域服务,而是通过依赖注入获取作用域服务。例如,你可以将需要使用的作用域服务作为构造函数参数传递到单例服务......
  • java高频面试题(八股文)
    基础/集合1.ArrayList/LinkedList有什么区别?1、数据结构: 在数据结构上,ArrayList 和 LinkedList 都是 “线性表”,都继承于 Java 的 List 接口。另外 LinkedList 还实现了 Java 的 Deque 接口,是基于链表的栈或队列,与之对应的是 ArrayDeque 基于数组的栈或队......
  • JVM 场景面试题【强烈推荐】
    前言:前面系列文章让我们对JVM及垃圾回收相关的知识有了一个基本的了解,JVM的知识比较偏概念,当然也有一些底层的源码可以去研读,但多数来说我们了解了JVM的原理即可,本篇我们将基于前面分享的JVM相关的原理知识,提取一些JVM中场景的面试题,希望可以帮助到有需要的朋友。......
  • 面试精选01-谈谈你对Abp中模块的理解
    模块可以理解成系统中一个独立的功能。例如缓存Redis、队列RabbitMQ、IOC框架Autofac。使用ABP模块可以解决模块之间的依赖问题,通过模块化设计,每个模块可以独立开发、测试和部署,从而减少代码的耦合度,提高了代码的可维护性和复用性,同时使得应用程序更加容易扩展和升级。在A......
  • Spring Cloud 经典面试题
    一、谈谈SpringCloud优缺点? SpringCloud的优点是:集成度高、生态丰富、可扩展性强、功能全面。SpringCloud的缺点是:学习曲线陡峭、有一定的性能开销、组件迭代快版本多、管理复杂。集成度高:SpringCloud集成了多个成熟的微服务组件(如Eureka、Zuul、Ribbon、Hystrix、Sl......
  • 2025年前端面试准备css篇
    1.css盒子模型css包含了内容(content),内边距(padding),边框(border),外边距(margin)等因素。css标准盒子模型宽包括:margin+border+padding+widthIE盒子模型的宽包括:border+padding+width 2.css选择器优先级id选择器:#main{}class选择器:.main{}......
  • Java面试之多线程&并发篇(6)
    前言本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!产生死锁的四个必要条件?如何避免死锁?线程池核心线程数怎么设置呢?Java线程池中队列常用类型有哪些?似乎有点模糊了,那就大概看一下面试题吧。好记性不如烂键盘***12万字的java面试题整理******java核心面试知识整理***......
  • 【面试经验】美团 前端开发 秋招正式批 共三面凉经
    部门:金融服务(貌似是支付相关)时间:笔试完三天约面一面:实习及项目相关了解微前端吗微前端怎么匹配子应用qiankun框架和其它微前端框架隔离策略的不同之处qiankun为什么要求子应用打包是umd格式umd、CommonJS、ESModules有什么区别reactfiber原理react18有什么更新......
  • 【面试经验】eBay 前端日常实习
    #软件开发笔面经#1.自我介绍2.你是怎么学前端的?3.自己挑一个简历上的项目来介绍4.聊团队开发,功能设计,部署上线5.项目最核心的一个用户流程是怎么样的?6.聊市面上的竞品项目,发现哪些问题,可以如何去优化7.用英文问两个问题,要求用英文回答(听不懂)----第二......