摘要:防抖多次觸發(fā)事件后,事件處理函數(shù)只執(zhí)行一次,并且是在觸發(fā)操作結(jié)束時(shí)執(zhí)行。
防抖:多次觸發(fā)事件后,事件處理函數(shù)只執(zhí)行一次,并且是在觸發(fā)操作結(jié)束時(shí)執(zhí)行。
function debounce(fn) { // 4、創(chuàng)建一個(gè)標(biāo)記用來(lái)存放定時(shí)器的返回值 let timeout = null; return function() {除 clearTimeout(timeout); var args = arguments; timeout = setTimeout(() => { fn.apply(this, args); }, 1000); }; } sayDebounce(){ console.log("防抖成功!"); } btn.addEventListener("click", debounce(sayDebounce));節(jié)流: 觸發(fā)函數(shù)事件后,短時(shí)間間隔內(nèi)無(wú)法連續(xù)調(diào)用,只有上一次函數(shù)執(zhí)行后,過(guò)了規(guī)定的時(shí)間間隔,才能進(jìn)行下一次的函數(shù)調(diào)用
var throttle = function(func, delay) { var prev = Date.now(); return function() { var context = this; var args = arguments; var now = Date.now(); if (now - prev >= delay) { func.apply(context, args); prev = Date.now(); } } } function handle() { console.log(Math.random()); } window.addEventListener("scroll", throttle(handle, 1000)); // 處理函數(shù) function handle() { console.log(Math.random()); } // 滾動(dòng)事件 window.addEventListener("scroll", debounce(handle, 1000));js 實(shí)現(xiàn)once 方法
function runOnce(fn, context) { //控制讓函數(shù)只觸發(fā)一次 return function () { try { fn.apply(context || this, arguments); } catch (e) { console.error(e);//一般可以注釋掉這行 } finally { fn = null; } } } var obj = {name: "狗子", age: 24}; var canOnlyFireOnce = runOnce(function () { console.log("你好" + this.name); }, obj); canOnlyFireOnce(); //你好天涯孤雁 canOnlyFireOnce(); // nothing實(shí)現(xiàn)bind 或者 call
Function.prototype.bind= function(obj){ var _self = this, args = arguments; return function() { _self.apply(obj, Array.prototype.slice.call(args, 1)); } } Function.protype.call = function(context){ context = context || window context.fn = this; const args = [...arguments].slice(1); const result = context.fn(...args); delete context.fn return result; }reduce實(shí)現(xiàn)map
const reduceMap = (fn, thisArg /*真想去掉thisArg這個(gè)參數(shù)*/ ) => { return (list) => { // 不怎么愿意寫下面這兩個(gè)判斷條件 if (typeof fn !== "function") { throw new TypeError(fn + "is not a function") } if (!Array.isArray(list)) { throw new TypeError("list must be a Array") } if (list.length === 0) return [] return list.reduce((acc, value, index) => { return acc.concat([ fn.call(thisArg, value, index, list) ]) }, []) } } // 來(lái)使用下怎么樣
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109439.html
摘要:所以使用記住要把原始的數(shù)據(jù)取出來(lái)和你要新增的數(shù)據(jù)合并后再提交,如單元測(cè)試如各位還有其他更好的方式,歡迎交流補(bǔ)充。 使用Patch方式更新K8S的 API Objects 一共有三種方式:strategic merge patch, json-patch,json merge patch。關(guān)于這三種方式的文字描述區(qū)別可看官方文檔update-api-object-kubectl-patc...
摘要:環(huán)境其它版本沒(méi)有測(cè)試,下列簡(jiǎn)稱和分別延遲秒秒和立即,并會(huì)在控制臺(tái)里打印和測(cè)試代碼做測(cè)試步驟不為設(shè)定或時(shí)頁(yè)面會(huì)在所有加載和執(zhí)行完后渲染輸出和設(shè)置為會(huì)等的秒延遲后,控制臺(tái)會(huì)立即輸出和等的秒后會(huì)輸出并觸發(fā),最后觸發(fā)會(huì)等的秒延遲后,控制臺(tái)會(huì)立即 環(huán)境: chrome31/firefox25/IE11(其它版本沒(méi)有測(cè)試),下列簡(jiǎn)稱chrome/firefox/IE http://127.0....
Python 中通過(guò)函數(shù)定義所創(chuàng)建的用戶自定義函數(shù)對(duì)象均具有一些特殊屬性,需要注意的是這里介紹的是自定義函數(shù)(function類型)的特殊屬性,而非方法(method 類型)的特殊屬性,函數(shù)和方法的特熟屬性以及默認(rèn)的返回值可能不盡相同。 對(duì)于大多數(shù)特殊屬性,可以通過(guò)下面這個(gè)例子示范一下: class Test(): def func(self, v = dog): 這里演...
摘要:很多初學(xué)者弄不清變量提升和函數(shù)提升,整理寫幾個(gè)例子,分析一下,你很快搞明白怎么分析。精華放在最上面,兩個(gè)最基本的原則函數(shù)聲明優(yōu)先先聲明,后賦值,聲明和賦值是分開的。 很多初學(xué)者弄不清變量提升和函數(shù)提升,整理寫幾個(gè)例子,分析一下,你很快搞明白怎么分析。精華放在最上面,兩個(gè)最基本的原則: 函數(shù)聲明優(yōu)先 先聲明,后賦值,聲明和賦值是分開的。 讓我們看幾個(gè)例子并解釋下 先看這個(gè)例子: va...
上一篇文章:Python是動(dòng)態(tài)語(yǔ)言:動(dòng)態(tài)添加或刪除屬性、方法下一篇文章:私有化規(guī)則與屬性Property 裝飾器功能: 引入日志 函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì) 執(zhí)行函數(shù)前預(yù)備處理 執(zhí)行函數(shù)后清理功能 權(quán)限校驗(yàn) 緩存 1、無(wú)參數(shù)函數(shù)的裝飾器 實(shí)例: from time import ctime,sleep def time_fun(func): #內(nèi)部包裹函數(shù) def wrapped_...
閱讀 1343·2021-09-01 11:40
閱讀 3957·2021-08-05 10:03
閱讀 984·2019-08-30 15:54
閱讀 2826·2019-08-29 12:53
閱讀 3191·2019-08-29 12:23
閱讀 947·2019-08-26 13:45
閱讀 2288·2019-08-26 10:41
閱讀 2543·2019-08-23 16:44