看看这些常见的js手写题你会写多少个

简介: 看看这些常见的js手写题你会写多少个

防抖

使用场景: 输入框输入搜索,拖拽( mousemove )

效果: 不是每次操作后执行函数.在频繁操作的最后一次操作结束后在设置的时间内没有触发操作时才执行回调

两种思路

  1. 立即执行: 在第一次触发事件的时候立即执行当前操作的回调,后面的操作在最后一次操作结束后在设置的时间内没有触发操作时才执行回调
  2. 无立即执行: 按最后一次操作结束后的规定时间执行
function debounce(fn, delay, immediate) {
  let timer; //利用闭包保存同一个timer
  return function () {
    let self = this;
    let arg = arguments;
    clearTimeout(timer);
    if (immediate) {
      const callNow = !timer;
      timer = setTimeOut(() => {
        timer = null;
      }, delay);
      if (callNow) fn.apply(self.arg);
    } else {
      timer = setTimeout(() => {
        fn.apply(self, arg);
      }, delay);
    }
  };
}

节流

使用场景:滚动条滚动,频繁点击请求接口

效果:预定一个函数只有在大于等于执行周期时才执行

两种思路:

  1. 时间戳,先会立即执行,达到时间周期再执行
function throttle(fn, delay) {
  let t;
  return function () {
    let self = this;
    let arg = arguments;
    if (!t || Date.now() - t >= delay) {
      fn.apply(self, arg);
      t = new Date();
    }
  };
}
  1. 定时器,定时一定时间周期之后去执行,但是在这时间内中不停的调用,不让他的定时器清零重新计时,不会影响当前的结果,还是那时间继续等,等到达时间周期后触发(会出现停止操作还是会触发)
function throttle(fn,delay) {
  let timer
  retrun function () {
    let self = this
    let arg = arguments
    if(timer) return
    timer = setTimeOut(()=> {
      fn.apply(fn,arg)
      timer = null
    },delay)
  }
}


相关文章
|
缓存 前端开发 JavaScript
精进 JavaScript | 这些手写你都会吗 ?
精进 JavaScript | 这些手写你都会吗 ?
142 0
精进 JavaScript | 这些手写你都会吗 ?
|
前端开发 JavaScript
javaScript 进阶之路 --- 《手写 Promise(后篇)》(二)
javaScript 进阶之路 --- 《手写 Promise(后篇)》
javaScript 进阶之路 --- 《手写 Promise(后篇)》(二)
|
存储 前端开发 JavaScript
javaScript 进阶之路 --- 《手写 Promise(后篇)》(一)
javaScript 进阶之路 --- 《手写 Promise(后篇)》
javaScript 进阶之路 --- 《手写 Promise(后篇)》(一)
|
存储 前端开发 JavaScript
javaScript 进阶之路 --- 《手写 Promise(中篇)》(二)
javaScript 进阶之路 --- 《手写 Promise(中篇)》
javaScript 进阶之路 --- 《手写 Promise(中篇)》(二)
|
存储 前端开发 JavaScript
javaScript 进阶之路 --- 《手写 Promise(中篇)》(一)
javaScript 进阶之路 --- 《手写 Promise(中篇)》
javaScript 进阶之路 --- 《手写 Promise(中篇)》(一)
|
前端开发 JavaScript
javaScript 进阶之路 --- 《手写 Promise(前篇)》(二)
javaScript 进阶之路 --- 《手写 Promise(前篇)》
javaScript 进阶之路 --- 《手写 Promise(前篇)》(二)
|
前端开发 JavaScript
javaScript 进阶之路 --- 《手写 Promise(前篇)》(一)
javaScript 进阶之路 --- 《手写 Promise(前篇)》
javaScript 进阶之路 --- 《手写 Promise(前篇)》(一)
|
前端开发 JavaScript
javaScript 进阶之路 --- 《手写“回调地狱”》(二)
javaScript 进阶之路 --- 《手写“回调地狱”》
javaScript 进阶之路 --- 《手写“回调地狱”》(二)
|
前端开发 JavaScript
javaScript 进阶之路 --- 《手写“回调地狱”》(一)
javaScript 进阶之路 --- 《手写“回调地狱”》
javaScript 进阶之路 --- 《手写“回调地狱”》(一)
|
XML JSON JavaScript
2021年的几次面试让我死磕了17道JS手写题!(下)
2021年的几次面试让我死磕了17道JS手写题!
125 0

热门文章

最新文章

  • 1
    当面试官再问我JS闭包时,我能答出来的都在这里了。
    45
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    28
  • 3
    Node.js 中实现多任务下载的并发控制策略
    34
  • 4
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 5
    【JavaScript】深入理解 let、var 和 const
    49
  • 6
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    47
  • 7
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    57
  • 8
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    57
  • 9
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    72
  • 10
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55