国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一分鐘學習JavaScript系列 -- 閉包

keke / 1486人閱讀

摘要:此時,中定義的局部變量就被保存在內(nèi)存中。所以當執(zhí)行的時候,其真正的作用域是運行時的作用域運行時作用域詞法作用域所以第一次調(diào)用時,由于是,所以返回而第二次返回是。因此在使用閉包時,需要非常注意內(nèi)存泄漏的問題。

說起閉包,相信寫前端的同學都知道,而且相信在實際的項目中或多或少都已經(jīng)用到了閉包。那到底什么才是閉包,閉包又是怎么產(chǎn)生的呢?

1. 什么是閉包
在阮老師的文章中提到:

閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。由于在Javascript語言中,只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,因此可以把閉包簡單理解成"定義在一個函數(shù)內(nèi)部的函數(shù)"。

2. 閉包的作用
一個是可以讀取函數(shù)內(nèi)部的變量,另一個就是讓這些變量的值始終保持在內(nèi)存中。

3. 一個簡單的閉包實例

function count() {
    let num = 0;
    return function add() {
        return ++num;
    }
}
let a = count();
a();  //1
a();  //2

首先將count()的返回結(jié)果也就是count()函數(shù)里的返回的函數(shù)賦值給a。此時,count()中定義的局部變量num就被保存在內(nèi)存中。當?shù)谝淮握{(diào)用a()時,返回++num,即1;當?shù)诙握{(diào)用a()時,由于此時num是1,所以返回的結(jié)果是2

4. 產(chǎn)生閉包的原因
相信很多人對這個問題都很困惑,都會認為一個函數(shù)中,返回一個函數(shù),這樣就形成了閉包。其實這僅僅是閉包產(chǎn)生的方法,而不是原因,下面將為大家解釋原因。
產(chǎn)生的主要原因是因為JavaScript是詞法作用域的,即在該函數(shù)定義時就已經(jīng)被賦予了一個作用域。然后在運行時,又會根據(jù)實際運行情況被賦予運行時的作用域。通過這兩個作用域一個JS函數(shù)才會被正確執(zhí)行。
以上例為例,在執(zhí)行count()的時候,該函數(shù)的作用域是

運行時作用域 num = 0
詞法作用域

當count()執(zhí)行時,返回add函數(shù)的時候,由于此時add處于定義狀態(tài),故返回時生成的該函數(shù)的詞法作用域即為上述count()的作用域。所以當執(zhí)行a()的時候,其真正的作用域是

add運行時的作用域
count運行時作用域 num = 0
count詞法作用域

所以第一次調(diào)用add時,由于num是0,所以返回1;而第二次返回是2。

5. 總結(jié)
從上述的描述中,可以看出由于生成閉包的時候,外部函數(shù)的局部變量(運行時作用域)被內(nèi)部函數(shù)作為詞法作用域保存在內(nèi)存中,故當內(nèi)部函數(shù)被釋放之前,該塊內(nèi)存是不會被釋放的。因此在使用閉包時,需要非常注意內(nèi)存泄漏的問題。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/107255.html

相關(guān)文章

  • JavaScript系列(四) - 收藏集 - 掘金

    摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗Х妒健:瘮?shù)式編程是一種強調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。因此,...

    cfanr 評論0 收藏0
  • JavasScript重難點知識

    摘要:忍者級別的函數(shù)操作對于什么是匿名函數(shù),這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數(shù)是一個很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎, 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機制,如果...

    forsigner 評論0 收藏0
  • JavaScript - 收藏集 - 掘金

    摘要:插件開發(fā)前端掘金作者原文地址譯者插件是為應用添加全局功能的一種強大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內(nèi)優(yōu)雅的實現(xiàn)文件分片斷點續(xù)傳。 Vue.js 插件開發(fā) - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應用添加全局功能的一種強大而且簡單的方式。插....

    izhuhaodev 評論0 收藏0
  • JS筆記

    摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。異步編程入門的全稱是前端經(jīng)典面試題從輸入到頁面加載發(fā)生了什么這是一篇開發(fā)的科普類文章,涉及到優(yōu)化等多個方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結(jié)思考,循序漸進的理解 TypeScript。 網(wǎng)絡基礎知識之 HTTP 協(xié)議 詳細介紹 HTT...

    rottengeek 評論0 收藏0
  • 前端補集 - 收藏集 - 掘金

    摘要:原文地址一個非常適合入門學習的博客項目前端掘金一個非常適合入門學習的項目,代碼清晰結(jié)構(gòu)合理新聞前端掘金介紹一個由編寫的新聞。深入淺出讀書筆記知乎專欄前端專欄前端掘金去年的一篇老文章,恰好今天專欄開通,遷移過來。 破解前端面試(80% 應聘者不及格系列):從閉包說起 - 掘金修訂說明:發(fā)布《80% 應聘者都不及格的 JS 面試題》之后,全網(wǎng)閱讀量超過 6W,在知乎、掘金、cnodejs ...

    YorkChen 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<