Until

debounce (防抖)函數(shù)

$('textarea').on('keydown', debounce(ajaxAction, 2500));

function debounce(fn, delay){
  var timer = null; // 聲明計時器
  return function() {
    var context = this;
    var args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function () {
      fn.apply(context, args);
    }, delay);
  };
}

上面代碼中,只要在2500毫秒之內(nèi),用戶再次擊鍵,就會取消上一次的定時器,然后再新建一個定時器。這樣就保證了回調(diào)函數(shù)之間的調(diào)用間隔,至少是2500毫秒。

清除所有定時器

setTimeout和setInterval函數(shù),都返回一個整數(shù)值,表示計數(shù)器編號。將該整數(shù)傳入clearTimeout和clearInterval函數(shù),就可以取消對應(yīng)的定時器。

var id1 = setTimeout(f, 1000);
var id2 = setInterval(f, 1000);

clearTimeout(id1);
clearInterval(id2);

上面代碼中,回調(diào)函數(shù) f 不會再執(zhí)行了,因為兩個定時器都被取消了。

setTimeout和setInterval返回的整數(shù)值是連續(xù)的,也就是說,第二個setTimeout方法返回的整數(shù)值,將比第一個的整數(shù)值大1。

function f() {}
setTimeout(f, 1000) // 10
setTimeout(f, 1000) // 11
setTimeout(f, 1000) // 12

上面代碼中,連續(xù)調(diào)用三次setTimeout,返回值都比上一次大了1。

利用這一點,可以寫一個函數(shù),取消當前所有的setTimeout定時器。

(function() {
  // 每輪事件循環(huán)檢查一次
  var gid = setInterval(clearAllTimeouts, 0);

  function clearAllTimeouts() {
    var id = setTimeout(function() {}, 0);
    while (id > 0) {
      if (id !== gid) {
        clearTimeout(id);
      }
      id--;
    }
  }
})();

上面代碼中,先調(diào)用setTimeout,得到一個計算器編號,然后把編號比它小的計數(shù)器全部取消。

生成隨機ID

// 生成長度為11的隨機字母數(shù)字字符串
Math.random().toString(36).substring(2);
// hg7znok52x

獲取URL的查詢參數(shù)

// 獲取URL的查詢參數(shù)
q={};location.search.replace(/([^?&=]+)=([^&]+)/g,(_,k,v)=>q[k]=v);q;
// ?foo=bar&baz=bing => {foo: bar, baz: bing}

數(shù)組混淆

隨機更改數(shù)組元素順序,混淆數(shù)組

// 隨機更改數(shù)組元素順序,混淆數(shù)組
(arr) => arr.slice().sort(() => Math.random() - 0.5)
/* 
let a = (arr) => arr.slice().sort(() => Math.random() - 0.5)
let b = a([1,2,3,4,5])
console.log(b)
*/

生成隨機十六進制代碼(生成隨機顏色)

使用JavaScript簡潔代碼生成隨機十六進制代碼

// 生成隨機十六進制代碼 如:'#c618b2'
'#' + Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0');

數(shù)組去重

這是一個原生的JS函數(shù)但是非常簡潔,Set接受任何可迭代對象,如數(shù)組[1,2,3,3],并刪除重復(fù)項

// 數(shù)組去重
[...new Set(arr)]

創(chuàng)建特定大小的數(shù)組

[...Array(3).keys()]
// [0, 1, 2]

返回一個鍵盤(驚呆了)

這是一個很難看懂的簡潔代碼,但是運行后你會驚呆的,他竟然返回一個圖形鍵盤

// 用字符串返回一個鍵盤圖形
(_=>[..."`1234567890-=~~QWERTYUIOP[]\\~ASDFGHJKL;'~~ZXCVBNM,./~"].map(x=>(o+=`/${b='_'.repeat(w=x<y?2:' 667699'[x=["BS","TAB","CAPS","ENTER"][p++]||'SHIFT',p])}\\|`,m+=y+(x+'    ').slice(0,w)+y+y,n+=y+b+y+y,l+=' __'+b)[73]&&(k.push(l,m,n,o),l='',m=n=o=y),m=n=o=y='|',p=l=k=[])&&k.join`
`)()
" ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||` |||1 |||2 |||3 |||4 |||5 |||6 |||7 |||8 |||9 |||0 |||- |||= |||BS    ||
||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
 ________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____
||TAB   |||Q |||W |||E |||R |||T |||Y |||U |||I |||O |||P |||[ |||] |||\ ||
||______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__||
|/______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|
 _________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ________
||CAPS   |||A |||S |||D |||F |||G |||H |||J |||K |||L |||; |||' |||ENTER ||
||_______|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||______||
|/_______\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/______\|
 ___________ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ___________
||SHIFT    |||Z |||X |||C |||V |||B |||N |||M |||, |||. |||/ |||SHIFT    ||
||_________|||__|||__|||__|||__|||__|||__|||__|||__|||__|||__|||_________||
|/_________\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/__\|/_________\|"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JavaScript提供定時執(zhí)行代碼的功能,叫做定時器(timer),主要由setTimeout()和setInt...
    許先生__閱讀 682評論 0 1
  • 第1章 認識JS JavaScript能做什么?1.增強頁面動態(tài)效果(如:下拉菜單、圖片輪播、信息滾動等)2.實現(xiàn)...
    mo默22閱讀 1,529評論 0 5
  • 一、JS前言 (1)認識JS 也許你已經(jīng)了解HTML標記(也稱為結(jié)構(gòu)),知道了CSS樣式(也稱為表示),會使用HT...
    凜0_0閱讀 2,945評論 0 8
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,620評論 0 6
  • 今天是十一月十六號。 兩個月前,也就是9月16號,一個星期六,我第一次用網(wǎng)上買的丙烯酸顏料,在石頭上畫了一個小和尚...
    旌城蝸牛閱讀 602評論 16 26

友情鏈接更多精彩內(nèi)容