摘要:防抖多次觸發事件后,事件處理函數只執行一次,并且是在觸發操作結束時執行。
防抖:多次觸發事件后,事件處理函數只執行一次,并且是在觸發操作結束時執行。
function debounce(fn) { // 4、創建一個標記用來存放定時器的返回值 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));節流: 觸發函數事件后,短時間間隔內無法連續調用,只有上一次函數執行后,過了規定的時間間隔,才能進行下一次的函數調用
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)); // 處理函數 function handle() { console.log(Math.random()); } // 滾動事件 window.addEventListener("scroll", debounce(handle, 1000));js 實現once 方法
function runOnce(fn, context) { //控制讓函數只觸發一次 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實現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實現map
const reduceMap = (fn, thisArg /*真想去掉thisArg這個參數*/ ) => { return (list) => { // 不怎么愿意寫下面這兩個判斷條件 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) ]) }, []) } } // 來使用下怎么樣
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109439.html
摘要:所以使用記住要把原始的數據取出來和你要新增的數據合并后再提交,如單元測試如各位還有其他更好的方式,歡迎交流補充。 使用Patch方式更新K8S的 API Objects 一共有三種方式:strategic merge patch, json-patch,json merge patch。關于這三種方式的文字描述區別可看官方文檔update-api-object-kubectl-patc...
摘要:環境其它版本沒有測試,下列簡稱和分別延遲秒秒和立即,并會在控制臺里打印和測試代碼做測試步驟不為設定或時頁面會在所有加載和執行完后渲染輸出和設置為會等的秒延遲后,控制臺會立即輸出和等的秒后會輸出并觸發,最后觸發會等的秒延遲后,控制臺會立即 環境: chrome31/firefox25/IE11(其它版本沒有測試),下列簡稱chrome/firefox/IE http://127.0....
Python 中通過函數定義所創建的用戶自定義函數對象均具有一些特殊屬性,需要注意的是這里介紹的是自定義函數(function類型)的特殊屬性,而非方法(method 類型)的特殊屬性,函數和方法的特熟屬性以及默認的返回值可能不盡相同。 對于大多數特殊屬性,可以通過下面這個例子示范一下: class Test(): def func(self, v = dog): 這里演...
摘要:很多初學者弄不清變量提升和函數提升,整理寫幾個例子,分析一下,你很快搞明白怎么分析。精華放在最上面,兩個最基本的原則函數聲明優先先聲明,后賦值,聲明和賦值是分開的。 很多初學者弄不清變量提升和函數提升,整理寫幾個例子,分析一下,你很快搞明白怎么分析。精華放在最上面,兩個最基本的原則: 函數聲明優先 先聲明,后賦值,聲明和賦值是分開的。 讓我們看幾個例子并解釋下 先看這個例子: va...
上一篇文章:Python是動態語言:動態添加或刪除屬性、方法下一篇文章:私有化規則與屬性Property 裝飾器功能: 引入日志 函數執行時間統計 執行函數前預備處理 執行函數后清理功能 權限校驗 緩存 1、無參數函數的裝飾器 實例: from time import ctime,sleep def time_fun(func): #內部包裹函數 def wrapped_...
閱讀 1334·2021-09-01 11:40
閱讀 3940·2021-08-05 10:03
閱讀 973·2019-08-30 15:54
閱讀 2815·2019-08-29 12:53
閱讀 3178·2019-08-29 12:23
閱讀 940·2019-08-26 13:45
閱讀 2276·2019-08-26 10:41
閱讀 2534·2019-08-23 16:44