什么是閉包神得,使用場景及優(yōu)缺點厘惦?

什么是閉包?

定義:閉包是指在 JavaScript 中循头,內部函數(shù)總是可以訪問其所在的外部函數(shù)中聲明的參數(shù)和變量绵估,即使在其外部函數(shù)被返回(壽命終結)了之后。
閉包就是能夠讀取其他函數(shù)內部變量的函數(shù)卡骂,說白了閉包就是個函數(shù)国裳,只不過是處于其他函數(shù)內部而已。
由于在javascript中全跨,只有函數(shù)內部的子函數(shù)才能讀取局部變量缝左,所以說,閉包可以簡單理解成“定義在一個函數(shù)內部的函數(shù)“。
所以渺杉,在本質上蛇数,閉包是將函數(shù)內部和函數(shù)外部連接起來的橋梁。

用途是什么是越?
  • 1.訪問函數(shù)內部的變量
  • 2.防止函數(shù)內部的變量執(zhí)行完城后耳舅,被銷毀,使其一直保存在內存中倚评。
function outer(x) {
// 參數(shù)相當于局部的變量
    function inner(y) {
       console.log(x + y);
}
   return inner;
}
var closure = outer(3);
closure(7); // 輸出10

inner函數(shù)把自己內部的語句浦徊,和自己在聲明時所處的作用域一起封裝成了一個密閉的環(huán)境,我們就稱之為閉包天梧。
函數(shù)本身就是一個閉包盔性,函數(shù)在定義的時候,就能記住自己的外部環(huán)境和內部語句呢岗,每次執(zhí)行的時候冕香,會參考定義時的密閉環(huán)境。

閉包的缺點
  • 缺點:如果不是某些特定任務需要使用閉包后豫,在其它函數(shù)中創(chuàng)建函數(shù)是不明智的悉尾,因為閉包在處理速度和內存消耗方面對腳本性能具有負面影響。
實際的項目應用
  • 常用于項目的防抖節(jié)流函數(shù)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script>
        window.onload = function() {
            //獲取兩個按鈕
            const debounceBtn = document.querySelector("#debounce")
            const thorttleBtn = document.querySelector("#thorttle")
            
            //防抖
            function Debounce(fn, delay) {
                let timer = null
                //定義內部函數(shù)
                const debounce = function() {
                    //形成閉包硬贯,timer變量不被釋放焕襟,如果timer不為空則清除延時執(zhí)行
                    if(timer) clearTimeout(timer)
                    //最后一次觸發(fā)執(zhí)行
                    timer = setTimeout(() => {
                        fn()
                    }, delay) 
                }

                return debounce
            }

            debounceBtn.onclick = Debounce(() => {console.log("Debounce")}, 1000)

            //節(jié)流
            function Thorttle(fn, delay) {
                let timer = null
                //定義內部函數(shù)
                const thorttle = function() {
                    //如果有延時任務則不在重新觸發(fā)
                    if(!timer) {
                        timer = setTimeout(() => {
                            fn()
                            //delay時間后把timer設置為null
                            timer = null
                        }, delay)
                    }
                }

                return thorttle
            }

            thorttleBtn.onclick = Thorttle(() => {console.log("Thorttle")}, 1000)            
        }
    </script>
</head>
<body>
   <button id="debounce">防抖</button>
   <button id="thorttle">節(jié)流</button>
</body>
</html>
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市饭豹,隨后出現(xiàn)的幾起案子鸵赖,更是在濱河造成了極大的恐慌,老刑警劉巖拄衰,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件它褪,死亡現(xiàn)場離奇詭異,居然都是意外死亡翘悉,警方通過查閱死者的電腦和手機茫打,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妖混,“玉大人老赤,你說我怎么就攤上這事≈剖校” “怎么了抬旺?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祥楣。 經常有香客問我开财,道長汉柒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任责鳍,我火速辦了婚禮碾褂,結果婚禮上,老公的妹妹穿的比我還像新娘历葛。我一直安慰自己正塌,他們只是感情好,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布啃洋。 她就那樣靜靜地躺著传货,像睡著了一般屎鳍。 火紅的嫁衣襯著肌膚如雪宏娄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天逮壁,我揣著相機與錄音孵坚,去河邊找鬼。 笑死窥淆,一個胖子當著我的面吹牛卖宠,可吹牛的內容都是我干的。 我是一名探鬼主播忧饭,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼扛伍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了词裤?” 一聲冷哼從身側響起刺洒,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吼砂,沒想到半個月后逆航,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡渔肩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年因俐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片周偎。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡抹剩,死狀恐怖,靈堂內的尸體忽然破棺而出蓉坎,到底是詐尸還是另有隱情澳眷,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布袍嬉,位于F島的核電站境蔼,受9級特大地震影響灶平,放射性物質發(fā)生泄漏。R本人自食惡果不足惜箍土,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一逢享、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吴藻,春花似錦瞒爬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至航罗,卻和暖如春禀横,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粥血。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工柏锄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人复亏。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓趾娃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缔御。 傳聞我的和親對象是個殘疾皇子抬闷,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內容