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

資訊專欄INFORMATION COLUMN

什么是閉包?為什么要閉包?使用閉包應(yīng)注意什么

raledong / 844人閱讀

摘要:一什么是閉包閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)。就是創(chuàng)建了一個匿名函數(shù)調(diào)用函數(shù)解除對匿名函數(shù)的引用,以便釋放內(nèi)存

一、什么是閉包?

閉包是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)。創(chuàng)建閉包的常見方式就是在一個函數(shù)內(nèi)部創(chuàng)建另一個函數(shù)。

二、為什么要閉包

說明:變量分為全局變量的局部變量,全局變量的作用域為全局作用域,局部變量作用域為局部作用域。之前一篇文章關(guān)于作用域鏈給了介紹,可以在函數(shù)內(nèi)部訪問全局變量,但是無法在全局環(huán)境中訪問函數(shù)內(nèi)部的變量。
那如果想在全局環(huán)境中訪問函數(shù)內(nèi)部變量呢?這時候就可以使用閉包。
閉包有兩個最大的用處,一個是可以在全局作用域中讀取內(nèi)部函數(shù)的的變量,另一個就是可以讓閉包中引用的變量始終保存在內(nèi)存中。
以下純屬個人理解,有不同意見歡迎在留言區(qū)討論哈。
如果閉包單純只是為了外部函數(shù)可以讀取內(nèi)部函數(shù)的變量,我們也可以通過對象將想要訪問的變量輸出就可以,如下所示:

但是閉包的另一個目的主要是為了讓閉包中引用的變量始終保存在內(nèi)存中,如下圖所示,調(diào)用nAdd函數(shù)修改n的值,可以發(fā)現(xiàn)使用閉包的函數(shù)中n的值+1:

原因:當(dāng)外部函數(shù)f2()執(zhí)行完畢后,其活動對象也不會被銷毀,因為匿名函數(shù)result2的作用域鏈仍然在引用這個活動對象。換句話說,當(dāng)f2()函數(shù)返回后,其執(zhí)行環(huán)境的作用域鏈會被銷毀,但它被result2引用的活動對象(變量)仍然會留在內(nèi)存中,直到result2被銷毀,f2被引用的變量才能被回收。

三、使用閉包應(yīng)注意的問題

由于閉包會攜帶包含它的函數(shù)的作用域,因此會比其他函數(shù)占用更多的內(nèi)存。因此可以手動解除對匿名函數(shù)的引用,以便釋放內(nèi)存。

function f2(){
    var n=22;
    var nAdd=function(){n++};
    return function(){
        return {
            n:n,
            nAdd:nAdd
        }
    }
}
//result2就是創(chuàng)建了一個匿名函數(shù)
var result2=f2();
//調(diào)用函數(shù)
console.log(result2());
result2().nAdd();
console.log(result2());
//解除對匿名函數(shù)的引用,以便釋放內(nèi)存
result2=null;

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

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

相關(guān)文章

  • 到底什么閉包?深入理解javascript閉包

    摘要:如何使用閉包所以這時候我們就要用閉包去解決這個問題了,先看代碼。計數(shù)器為這時候的就形成了一個閉包。一個閉包由兩部分組成,函數(shù)和創(chuàng)建該函數(shù)的環(huán)境。就是創(chuàng)建了一個匿名函數(shù)調(diào)用函數(shù)解除對匿名函數(shù)的引用,以便釋放內(nèi)存 古老定義 閉包(closure),是指函數(shù)變量可以保存在函數(shù)作用域內(nèi),因此看起來是函數(shù)將變量包裹了起來。 //根據(jù)定義,包含變量的函數(shù)就是閉包 function foo() { ...

    figofuture 評論0 收藏0
  • 簡單理解 JavaScript 閉包問題

    摘要:從我年開始接觸前端,知道閉包這個詞,已經(jīng)過去兩年了。概念閉包,在高級程序設(shè)計里面是這樣介紹的閉包是指有權(quán)訪問另一個作用域中的變量的函數(shù)。這樣形成的閉包雖然可以使外部可以訪問到內(nèi)部的函數(shù),但是導(dǎo)致了原有的作用域鏈不釋放,會造成內(nèi)存泄漏。 從我16年開始接觸前端,知道閉包這個詞,已經(jīng)過去兩年了。這兩年里,閉包這個概念我在很多地方了解過,卻實在沒有真的理解,久而久之,變成了一塊心病。這不,趁...

    lyning 評論0 收藏0
  • Python: 攜帶狀態(tài)的閉包

    閉包 在 Python 中,函數(shù)也是一個對象。因此,我們在定義函數(shù)時,可以再嵌套定義一個函數(shù),并將該嵌套函數(shù)返回,比如: from math import pow def make_pow(n): def inner_func(x): # 嵌套定義了 inner_func return pow(x, n) # 注意這里引用了外部函數(shù)的 n return...

    daryl 評論0 收藏0
  • 理解閉包

    摘要:歡迎移步我的博客閱讀理解閉包閉包是指可以包含自由未綁定到特定對象變量的代碼塊這些變量不是在這個代碼塊內(nèi)或者任何全局上下文中定義的,而是在定義代碼塊的環(huán)境中定義局部變量。 歡迎移步我的博客閱讀:《理解閉包》 閉包 是指可以包含自由(未綁定到特定對象)變量的代碼塊;這些變量不是在這個代碼塊內(nèi)或者任何全局上下文中定義的,而是在定義代碼塊的環(huán)境中定義(局部變量)。閉包 一詞來源于以下兩者的結(jié)...

    用戶83 評論0 收藏0
  • python基礎(chǔ)知識之函數(shù)初階——閉包

    摘要:我們說觸發(fā)了閉包的函數(shù)叫做閉包函數(shù)閉包最大的特點就是它可以被外層函數(shù)返回后賦值給一個變量,并且攜帶了外層函數(shù)內(nèi)定義的變量例子如下變量為函數(shù)開辟的局部命名空間內(nèi)定義的變量函數(shù)內(nèi)引用了變量的內(nèi)層函數(shù)名被當(dāng)作返回值,此時閉包規(guī)則達(dá)成。 什么是閉包? 其實我們在使用函數(shù)過程中不經(jīng)意間就會觸發(fā)閉包,因為總會出于某種原因會在函數(shù)內(nèi)引用或修改上一層函數(shù)的變量,這時就會觸發(fā)閉包 那么什么是閉包?其實就...

    TIGERB 評論0 收藏0

發(fā)表評論

0條評論

raledong

|高級講師

TA的文章

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