前端---閉包【防抖以及節流】----面試高頻!

?1.什么閉包

釋放閉包

從以上看出:一般函數調用一次會把內部的數據進行清除--但是這種操作卻可以一起保留局部作用域的數據

// 優點:1、可以讀取函數內部的變量 ?2、讓這些變量始中存在局部作用域當中

2.閉包產生的兩種業務場景:防抖、節流

2.1防抖

舉例:寫個按鈕--寫個點擊事件

你狂點登錄---login函數一直被執行!--這樣子容易崩潰!

效果:點擊登錄--等待3s--實現登錄

2.1節流【好比王者榮耀的冷卻cd】

參考博主:前端性能優化之防抖&節流_前端防抖節流-CSDN博客

節流n 秒內只執行一次事件,即使n 秒內事件重復觸發,也只有一次生效

應用場景:瀏覽器滾動事件、窗口大小的改變

舉例:監聽window的窗口大小

我只要不斷拉窗口--會一直觸發resize該事件!!--會造成大量計算

這么辦!【思路就是兩次觸發的時間間隔到了指定時間就執行--并且記錄第二次觸發的時間,否則不執行】

換句話說:【

1:多次觸發窗口---多次執行回調--多次獲取當前時間---只有滿足延遲(當前時間--上次觸發的事件>=延遲時間)--fn就會被執行---記錄當前時間時間作為上次觸發時間節點

2:多次觸發窗口---多次執行回調--多次獲取當前時間---不滿足延遲(當前時間--上次觸發的事件>=延遲時間)--fn就不會被執行----直到你觸發窗口的那次的當前時間剛好滿足延長時間】

完善代碼

   /* 節流 */// 瀏覽器滾動事件、窗口大小的改變function thorttle(/* 需要進行節流處理的函數 */ fn, /* 延遲的時間 */ time) {// 記錄上一次事件執行的時間let lastTime = 0let i = 1return function () {i++// 獲取當前時間const nowTime = new Date().getTime()// cd剩余時間const remainTime = nowTime - lastTimeif (remainTime - time >= 0) {fn()lastTime = nowTimeconsole.log(i, 'i');}}}function _resize() {console.log("節流")}window.addEventListener("resize", thorttle(_resize, 2000))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15627.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15627.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15627.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QGraphicsView實現簡易地圖16『爆炸效果』

前文鏈接:QGraphicsView實現簡易地圖15『測量面積』 一種簡單的爆炸波擴散效果 動態演示效果: 靜態展示圖片: 核心代碼: #pragma once #include "../AbstractGeoItem.h" #include "DataStruct/GeoData.h"…

sysbench壓測mysql性能測試命令和報告

sysbench壓測mysql性能測試命令和報告 一、安裝sysbench工具二、創建測試數據庫三、基于sysbench構造測試表和測試數據四、數據庫性能測試1、數據庫讀寫性能測試2、數據庫讀性能測試3、數據庫刪除性能測試4、數據庫更新索引字段性能測5、數據庫更新非索引字段性能測試6、數據庫…

windows ip助手函數了解

根據手冊,winsock編程中提供的有一類函數叫ip助手函數;比如Ipconfig函數,從名字看應該是可自己編程實現類似ipconfig命令的功能; 剛看到一個示例,是MS提供的,也屬于這一類,代碼如下, #include <winsock2.h> #include <ws2tcpip.h> #include <iphlpapi…

C++ vector類

目錄 0.前言 1.vector介紹 2.vector使用 2.1 構造函數(Constructor) 2.1.1. 默認構造函數 (Default Constructor) 2.1.2 填充構造函數 (Fill Constructor) 2.1.3 范圍構造函數 (Range Constructor) 2.1.4 拷貝構造函數 (Copy Constructor) 2.2 迭代器(Iterator) 2.2.…

十、通配符和正則表達式

10.1 通配符 通配符是由shell處理的, 它只會出現在 命令的“參數”里。當shell在“參數”中遇到了通配符 時&#xff0c;shell會將其當作路徑或文件名去在磁盤上搜尋可能的匹配&#xff1a;若符合要求的匹配存在&#xff0c;則進 行代換(路徑擴展)&#xff1b;否則就將該通配…

python安裝依賴

創建 requirement.txt 文件并填充內容 flask2.0.0 pandas1.3.3 numpy1.21.2 安裝模塊 pip install -r requirement.txt

Spring boot使用集群方式、支持ssl連接redis的方法

1、需求背景 項目需要提供一個管理界面給內部人員操作用戶信息&#xff0c;需要在修改用戶信息后刪除用戶的redis緩存。用戶所在的區域不同&#xff0c;其redis服務地址也不相同&#xff0c;因此需要管理多個redis連接&#xff0c;且redis要求以集群方式并支持ssl進行連接。 2…

Qt for android 獲取USB設備列表(一)Java方式 獲取

簡介 QtActivity 作為 Qt 應用程序的入口點&#xff0c;負責啟動和配置 Qt 應用程序的信息&#xff0c; 后面我們繼承 QtActivity 做自定義控制&#xff0c;了解一下 Activity 生命周期概念&#xff0c; 因為 QtActivity 繼承自Android的activity&#xff0c;使用周期函數完成我…

java8新特性——函數式編程詳解

目錄 一 概述1.1 背景1.2 函數式編程的意義1.3 函數式編程的發展 Lambda表達式1.1 介紹1.2 使用Lambda的好處1.3 Lambda方法1.3.1 Lambda表達式結構1.3.2 Lambda表達式的特征 1.4 Lambda的使用1.4.1 定義函數式接口1.4.2 Lambda表達式實現函數式接口1.4.3 簡化Lambda表達式1.4.…

C++學習/復習4--與類相關的概念/默認成員函數/運算符重載/Date類實現案例

一、類和對象 1.本章概要 2.C中的結構體(struct與class) 升級為類 &#xff08;1&#xff09;類及成員函數的兩種定義方式 聲明與定義分離 &#xff08;2&#xff09;權限 注意1&#xff1a;struct/class在權限上的區別 &#xff08;3&#xff09;封裝 &#xff08;4&#x…

AI學習指南數學工具篇-凸優化之對偶性與拉格朗日對偶

AI學習指南數學工具篇-凸優化之對偶性與拉格朗日對偶 在凸優化中&#xff0c;對偶性是一個非常重要的概念。通過對偶性&#xff0c;我們可以將原始問題轉化為對偶問題&#xff0c;從而更容易求解。其中&#xff0c;拉格朗日對偶問題是對偶性的一個重要應用&#xff0c;通過拉格…

《Ai學習筆記》自然語言處理 (Natural Language Processing):機器閱讀理解-基礎概念解析01

自然語言處理 (Natural Language Processing)&#xff1a; NLP四大基本任務 序列標注&#xff1a; 分詞、詞性標注 分類任務&#xff1a; 文本分類、情感分析 句子關系&#xff1a;問答系統、對話系統 生成任務&#xff1a;機器翻譯、文章摘要 機器閱讀理解的定義 Machi…

LangChain - 建立代理

本文翻譯整理自&#xff1a;Build an Agent https://python.langchain.com/v0.2/docs/tutorials/agents/ 文章目錄 一、說明概念 二、定義工具1、TavilyAPI參考&#xff1a; 2、RetrieverAPI參考&#xff1a;API參考&#xff1a; 3、工具 三、使用語言模型四、創建代理五、運行…

《安富萊嵌入式周報》第337期:超高性能信號量測量,協議分析的開源工具且核心算法開源,工業安全應用的雙通道數字I/O模組,低成本腦機接口,開源音頻合成器

周報匯總地址&#xff1a;http://www.armbbs.cn/forum.php?modforumdisplay&fid12&filtertypeid&typeid104 視頻版&#xff1a; https://link.zhihu.com/?targethttps%3A//www.bilibili.com/video/BV1PT421S7TR/ 《安富萊嵌入式周報》第337期&#xff1a;超高性…

【Spring Boot】分層開發 Web 應用程序(含實例)

分層開發 Web 應用程序 1.應用程序分層開發模式&#xff1a;MVC1.1 了解 MVC 模式1.2 MVC 和三層架構的關系 2.視圖技術 Thymeleaf3.使用控制器3.1 常用注解3.1.1 Controller3.1.2 RestController3.1.3 RequestMapping3.1.4 PathVariable 3.2 將 URL 映射到方法3.3 在方法中使用…

用戶數據報協議UDP實現可靠傳輸的思路

一、UDP協議的特點 按照報文來分割發送。不需要建立連接和維護連接。不需要接收確認。速度較快。不確保接收的順序和發送順序一樣。 二、用UDP實現可靠通信的思路 (一)接收時發送一個確認報文 實現接收確認的機制。 (二)每個報文騰出空間放置序號 發送時設置序號&#xff0c…

如何安裝虛擬機Wmware,并且在虛擬機中使用centos系統

1. 前言 大家好&#xff0c;我是jiaoxingk 本篇文章主要講解如何安裝虛擬機&#xff0c;并且在虛擬機中安裝centos系統&#xff0c;讓windows電腦也能夠使用Linux系統 2. 虛擬機的介紹 在安裝Vmware之前&#xff0c;我們先做虛擬機的介紹 虛擬機&#xff1a;通過軟件虛擬出來的…

Docker拉取鏡像報錯:x509: certificate has expired or is not yet v..

太久沒有使用docker進行鏡像拉取&#xff0c;今天使用docker-compose拉取mongo發現報錯&#xff08;如下圖&#xff09;&#xff1a; 報錯信息翻譯&#xff1a;證書已過期或尚未有效。 解決辦法&#xff1a; 1.一般都是證書問題或者系統時間問題導致&#xff0c;可以先執行 da…

用HAL庫改寫江科大的stm32入門例子-6-2 定時器外部時鐘

實驗目的&#xff1a; 熟悉外部時鐘的應用。 實驗步驟&#xff1a; 創建項目參照前面的文章&#xff0c;集成oled(沒有oled,用uart串口傳遞也可以)選擇外部時鐘源時鐘源參數設置編寫代碼&#xff1a; 5.1聲明全局變量&#xff0c;如果發生定時器中斷的時候&#xff0c;在回調…