成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

一分鐘學(xué)習(xí)JavaScript系列 -- 閉包

keke / 1536人閱讀

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

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

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

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

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

3. 一個(gè)簡(jiǎn)單的閉包實(shí)例

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

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

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

運(yùn)行時(shí)作用域 num = 0
詞法作用域

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

add運(yùn)行時(shí)的作用域
count運(yùn)行時(shí)作用域 num = 0
count詞法作用域

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/107255.html

相關(guān)文章

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

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

    cfanr 評(píng)論0 收藏0
  • JavasScript重難點(diǎn)知識(shí)

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

    forsigner 評(píng)論0 收藏0
  • JavaScript - 收藏集 - 掘金

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

    izhuhaodev 評(píng)論0 收藏0
  • JS筆記

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

    rottengeek 評(píng)論0 收藏0
  • 前端補(bǔ)集 - 收藏集 - 掘金

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

    YorkChen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<