麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > WEB開發 > 正文

JavaScript 閉包

2024-04-27 15:18:04
字體:
來源:轉載
供稿:網友

我們在了解閉包之前首先了解一下以下幾點:

變量作用域

變量分為:全局變量局部變量。 首先我們,根據以下幾個例子了解一下變量作用域:

這里寫圖片描述 函數內部可以訪問全局變量但是外部無法訪問內部變量。 這里寫圖片描述 函數內部的變量如果不加 var 關鍵字就會變成全局變量。作用域鏈:把函數自身的本地變量放在最前面,把自身的父級函數中的變量放在其次,把再高一級函數中的變量放在更后面,以此類推直至全局對象為止。當函數中需要查詢一個變量的值的時候,js解釋器會去作用域鏈去查找,從最前面的本地變量中先找,如果沒有找到對應的變量,則到下一級的鏈上找,一旦找到了變量,則不再繼續。如果找到最后也沒找到需要的變量,則解釋器返回undefined。

javaScript 內存回收機制

Javascript垃圾回收的機制很簡單:一個函數在執行開始的時候,會給其中定義的變量劃分內存空間保存,以備后面的語句所用。等到函數執行完畢返回了,這些變量就被認為是無用的了,對應的內存空間也就被回收了。下次再執行此函數的時候,所有的變量又回到最初的狀態,重新賦值使用。但是這個過程不是時時的,因為其開銷比較大,所以垃圾回收器會按照固定的時間間隔周期性的執行。

閉包

概念:

各種專業文獻上的”閉包”(closure)定義非常抽象,很難看懂。我的理解是,閉包就是能夠讀取其他函數內部變量的函數。由于在Javascript語言中,只有函數內部的子函數才能讀取局部變量,因此可以把閉包簡單理解成”定義在一個函數內部的函數”。在本質上,閉包就是將函數內部和函數外部連接起來的一座橋梁。

閉包的用途: 1、獲取函數內部的變量 這里寫圖片描述 如圖,使用閉包的方式來訪問函數內部的變量。 因為,A內部的匿名函數屬于A的子類,因此可以訪問父類的變量。我們將這個匿名函數作為返回值返回。這樣就可以訪問A的變量。 2、將變量存儲在內存中 這里寫圖片描述 如圖,使用閉包將變量存儲在內存當中。 原因:這個函數內部又嵌套了另一個函數,而這個函數是有可能在外部被調用到的。并且這個內部函數又使用了外部函數的某些變量的話。這種內存回收機制就會出現問題。如果在外部函數返回后,又直接調用了內部函數,那么內部函數就無法讀取到他所需要的外部函數中變量的值了。所以js解釋器在遇到函數定義的時候,會自動把函數和他可能使用的變量(包括本地變量和父級和祖先級函數的變量(自由變量))一起保存起來。也就是構建一個閉包,這些變量將不會被內存回收器所回收,只有當內部的函數不可能被調用以后(例如被刪除了,或者沒有了指針),才會銷毀這個閉包。而沒有任何一個閉包引用的變量才會被下一次內存回收啟動時所回收。

使用時候需要注意

由于閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法是,在退出函數之前,將不使用的局部變量全部刪除。

閉包會在父函數外部,改變父函數內部變量的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變量當作它的私有屬性(PRivate value),這時一定要小心,不要隨便改變父函數內部變量的值。

參考:http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 俄罗斯16一20sex牲色另类 | 欧美日韩一区,二区,三区,久久精品 | 成人激情在线观看 | 国产精品久久久久久238 | 深夜激情视频 | 国产成人自拍小视频 | 91短视频在线观看视频 | 免费久久精品 | 黄色片在线观看网站 | 国产精品久久国产精品 | 国产91丝袜在线熟 | 亚洲网在线观看 | 激情福利视频 | 欧美日韩精品不卡一区二区三区 | 中文字幕在线资源 | 动漫孕妇被羞羞视频 | 日韩欧美高清一区 | 国产一区二区三区四区五区精品 | 亚洲国产成人久久一区www妖精 | 黑人三级毛片 | av在线免费网 | 久久艹一区 | 国产91丝袜在线播放 | 羞羞网站 | 媚药按摩痉挛w中文字幕 | 亚洲一区二区观看播放 | 欧美成人免费 | 亚洲成人入口 | h视频在线免费观看 | 狠狠干天天操 | 伊人一二三四区 | 九一传媒在线观看 | 中文字幕一二三区芒果 | 国产精品嘿咻嘿咻在线播放 | 亚洲一区中文字幕 | 成人免费观看av | 极色品影院 | 国产超碰人人做人人爱ⅴa 国产精品久久久久久久hd | 欧美a级在线免费观看 | av国产免费| 成人午夜免费在线视频 |