摘要:一什么是閉包閉包是指有權(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
摘要:如何使用閉包所以這時候我們就要用閉包去解決這個問題了,先看代碼。計數(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() { ...
摘要:從我年開始接觸前端,知道閉包這個詞,已經(jīng)過去兩年了。概念閉包,在高級程序設(shè)計里面是這樣介紹的閉包是指有權(quán)訪問另一個作用域中的變量的函數(shù)。這樣形成的閉包雖然可以使外部可以訪問到內(nèi)部的函數(shù),但是導(dǎo)致了原有的作用域鏈不釋放,會造成內(nèi)存泄漏。 從我16年開始接觸前端,知道閉包這個詞,已經(jīng)過去兩年了。這兩年里,閉包這個概念我在很多地方了解過,卻實在沒有真的理解,久而久之,變成了一塊心病。這不,趁...
閉包 在 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...
摘要:我們說觸發(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ā)閉包 那么什么是閉包?其實就...
閱讀 1599·2021-11-22 09:34
閱讀 1690·2019-08-29 16:36
閱讀 2668·2019-08-29 15:43
閱讀 3113·2019-08-29 13:57
閱讀 1298·2019-08-28 18:05
閱讀 1875·2019-08-26 18:26
閱讀 3243·2019-08-26 10:39
閱讀 3455·2019-08-23 18:40