java架構師培訓:如何對 Nginx Ingress 進行核心引數調優
阿新 • • 發佈:2021-01-12
閉包
一個函式和對其周圍狀態(lexical environment,詞法環境)的引用捆綁在一起(或者說函式被引用包圍),這樣的組合就是閉包(closure)。
function once(fn){
let flag = false;
return function(){
//done不會被釋放
if(!flag){
flag = true;
return fn.apply(this,arguments)
}
}
}
let pay = once(function(money){
console.log(`已支付${money}元`)
} )
// 只會執行一次
pay(1)
pay(1)
閉包的本質:函式在執行的時候會放到一個執行棧上當函式執行完畢之後會從執行棧上移除,但是堆上的作用域成員因為被外部引用不能被釋放,因此內部函式依然可以訪問外部的成員。
常用的閉包操作
//防抖(debounce)
/**
* @fn: function 需要防抖的函式
* @delay: number 毫秒
**/
function debounce(fn,delay){
let timer = null //藉助閉包
return function() {
if(timer){
// 在定時的過程中出發相同的事件
clearTimeout(timer)
}
timer = setTimeout(fn,delay)
}
}