JavaScript中的閉包
1、什么是閉包
閉包,官方對(duì)閉包的解釋是:一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。
簡(jiǎn)單的說(shuō),Javascript允許使用內(nèi)部函數(shù)---即函數(shù)定義和函數(shù)表達(dá)式位于另一個(gè)函數(shù)的函數(shù)體內(nèi)。而且,這些內(nèi)部函數(shù)可以訪問(wèn)它們所在的外部函數(shù)中聲明的所有局部變量、參數(shù)和聲明的其他內(nèi)部函數(shù)。當(dāng)其中一個(gè)這樣的內(nèi)部函數(shù)在包含它們的外部函數(shù)之外被調(diào)用時(shí),就會(huì)形成閉包。
閉包的特點(diǎn)
1 函數(shù)嵌套函數(shù)
2 函數(shù)內(nèi)部可以引用外部的參數(shù)和變量
3 參數(shù)和變量不會(huì)被垃圾回收機(jī)制回收
一般函數(shù)執(zhí)行完畢后,局部活動(dòng)對(duì)象就被銷毀,內(nèi)存中僅僅保存全局作用域。但閉包的情況不同!
function fn(){ var a = ; function fn(){ //可以訪問(wèn)fn中定義的a值 alert( a++ ); } fn(); } fn(); // fn(); // function fn(){ var a = ; function fn(){ //可以訪問(wèn)fn中定義的a值 alert( a++ ); } return fn;// } var f = fn(); f(); // 執(zhí)行完后a還在內(nèi)存中 f(); // f = null; //a被回收
以上所述是小編給大家介紹JavaScript中的閉包,希望對(duì)大家有所幫助!
相關(guān)文章
JavaScript之DOM_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
由于HTML文檔被瀏覽器解析后就是一棵DOM樹(shù),要改變HTML的結(jié)構(gòu),就需要通過(guò)JavaScript來(lái)操作DOM。始終記住DOM是一個(gè)樹(shù)形結(jié)構(gòu)。2017-07-07調(diào)試Javascript代碼(瀏覽器F12及VS中debugger關(guān)鍵字)
目前,常用的瀏覽器IE、Chrome、Firefox都有相應(yīng)的腳本調(diào)試功能下面我就介紹如何在瀏覽器/VS中調(diào)試我們的JS代碼,感興趣的你可不要走開(kāi)啊,希望本文對(duì)你有所幫助2013-01-01Javascript控制頁(yè)面鏈接在新窗口打開(kāi)具體方法
今天看一個(gè)朋友說(shuō)不在A標(biāo)題中加打開(kāi)窗口形式要怎么讓頁(yè)面中所有頁(yè)面在新頁(yè)面打開(kāi),后來(lái)我找了幾種比較實(shí)用辦法,個(gè)人最喜歡的是最后一種方法哦2013-08-08JS點(diǎn)擊某個(gè)圖標(biāo)或按鈕彈出文件選擇框的實(shí)現(xiàn)代碼
本文給大家介紹js點(diǎn)擊點(diǎn)擊某個(gè)圖標(biāo)或按鈕彈出文件選擇框的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),感興趣的朋友可以參考下2016-09-09Javascript中apply、call、bind的巧妙使用
Javascript中apply、call、bind都是為了改變函數(shù)體內(nèi)部 this 的指向。下面通過(guò)本文重點(diǎn)給大家介紹js中apply,call,bind的巧妙使用方法,感興趣的朋友一起學(xué)習(xí)吧2016-08-08JavaScript Tips 使用DocumentFragment加快DOM渲染速度
大家在開(kāi)發(fā)JavaScript應(yīng)用的時(shí)候,如果遇到這種大量節(jié)點(diǎn)的情況,不妨將DocumentFragment作為一個(gè)備選的方案。2010-06-06js項(xiàng)目中添加ts支持實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了如何在js項(xiàng)目中添加ts支持實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08