摘要:每個家庭就好比一個閉包函數不同的家庭有不同的老婆老公孩子,他們的名字甚至也可以是一樣的,然后每個家庭是獨立的。
定義
閉包是一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。。(百度百科)
案例解讀通俗的說:JavaScript中所有的function都是一個閉包
基本案例
function foo() { var i = 0; return function() { return ++i; } } var bar=foo();
這里的foo運行后返回了一個函數,這個函數擁有一個自己私有的變量i,這個變量i不會因為foo運行結束了就被銷毀。
返回的這個函數被賦值給bar,這個bar就是一個閉包,它的特征是擁有自己的私有成員,該例子中私有成員是變量i,這個私有成員可以是一個函數
帶有循環的閉包
function foo() { var result = []; for (var i = 0; i < 10; i++) { result[i] = function(){return i}; } return result; } var bar = foo();
現象如上,原因是循環生成了10個閉包,但是,他們的私有成員i是他們共有的,當最后一個閉包函數生成后,i的值已經等于10,而前面的閉包的i都是這個i
循環生成閉包并且擁有真正的自己i
function foo() { var result = []; for (var i = 0; i < 10; i++) { result[i] = (function(i) { return function() { return i } })(i);仔細對比這里的區別 } return result; } var bar = foo();
總結顯然,循環生成的每個閉包都真正擁有的自己私有變量,解決辦法是代碼中的自執行函數包裹需要生成的閉包函數,并為閉包函數提供一個獨立的變量,這個時候它們的i是來自包裹它們的自執行函數的參數,而不是剛才的foo里面的那個i,所以它們各是各的
閉包的用途在我看來是為函數提供私有的變量,使得數據安全,不會污染別人的變量,別人的成員,別人的老婆。
每個家庭就好比一個閉包函數,不同的家庭有不同的老婆、老公、孩子,他們的名字甚至也可以是一樣的,然后每個家庭是獨立的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78384.html
摘要:怎么理解這句話呢也就是說一個函數離開了創建時的作用域,但是其還是會和這個作用域以及這個函數外部的作用域相關聯,也就是說變量依舊是那個變量以這個題目為參照,那么結果就很明了了。 var a = 2;var func = (function(){ var a = 3; return function(){ a++; console.log(a); } })(); func(...
摘要:簡要介紹閉包可謂是中的一大特色了,即使你對閉包沒概念,你可能已經在不知不覺中使用到了閉包。這就是閉包的獨特之處。當頁面中存在過多的閉包,或者閉包的嵌套很多很深時,會導致內存占用過多。因此,在這里建議慎用閉包。 1. 簡要介紹 閉包可謂是js中的一大特色了,即使你對閉包沒概念,你可能已經在不知不覺中使用到了閉包。閉包是什么,閉包就是一個函數可以訪問到另一個函數的變量。這就是閉包,解釋起...
摘要:所以,全局執行環境的變量對象始終都是作用域鏈中的最后一個對象。講到這里,可能你已經對執行環境執行環境對象變量對象作用域作用域鏈的理解已經他們之間的關系有了一個較清晰的認識。 JavaScript中的執行環境、作用域、作用域鏈、閉包一直是一個非常有意思的話題,很多博主和大神都分享過相關的文章。這些知識點不僅比較抽象,不易理解,更重要的是與這些知識點相關的問題在面試中高頻出現。之前我也看過...
摘要:建筑的頂層代表全局作用域。實際的塊級作用域遠不止如此塊級作用域函數作用域早期盛行的立即執行函數就是為了形成塊級作用域,不污染全局。這便是閉包的特點吧經典面試題下面的代碼輸出內容答案個如何處理能夠輸出閉包方式方式下一篇你不知道的筆記 下一篇:《你不知道的javascript》筆記_this 寫在前面 這一系列的筆記是在《javascript高級程序設計》讀書筆記系列的升華版本,旨在將零碎...
閱讀 1518·2023-04-25 17:41
閱讀 3040·2021-11-22 15:08
閱讀 842·2021-09-29 09:35
閱讀 1605·2021-09-27 13:35
閱讀 3323·2021-08-31 09:44
閱讀 2716·2019-08-30 13:20
閱讀 1939·2019-08-30 13:00
閱讀 2558·2019-08-26 12:12