摘要:閉包包含了函數也包含了聲明該函數的詞法環境作用域。閉包實際上是將函數與其所操作的某些數據環境關聯起來,這些數據或者是環境可以理解為它的一個作用域。定義局部變量特點閉包一定一個,只有才會有一個封閉的命名空間。
基本概念
函數和聲明該函數的詞法環境的組合。閉包包含了函數也包含了聲明該函數的詞法環境(作用域)。
閉包實際上是將函數與其所操作的某些數據(環境)關聯起來,這些數據或者是環境可以理解為它的一個作用域。因此我們可以達到一個能夠訪問另一個函數作用域的變量的函數的目的。
//定義局部變量 function count() { let count = 0; return function() { count = count + 1; console.log(count); } } var getCount = count(); getCount(); getCount(); // 1 // 2特點
閉包一定return一個function,只有function才會有一個封閉的命名空間。
函數嵌套函數
函數內部可以引用外部的參數和變量
參數和變量不會被垃圾回收機制回收
用途
匿名自執行函數 - 只需要執行一次,其內部變量無需維護
(function(){ // })();
封裝回調保存作用域(緩存結果)
for(var i = 1; i < 5; i++) { setTimeout((function(i) { return function() { console.log(i); } })(i), i * 1000) }
模擬私有方法
var myNameSpace = (function () { // 私有計數器變量 var myPrivateVar = 0; /* 記錄所有參數的私有函數 */ var myPrivateMethod = function (foo) { console.log(foo + myPrivateVar); }; return { // 公有變量 myPublicVar: "foo", // 調用私有變量和方法的公用函數 * myPublicFunction: function (bar) { // 增加私有計數器值 myPrivateVal ++; myPrivateMethod(bar); } }; })();常見誤區
在循環中創建閉包
for (var i = 1; i <= 5; i++) { setTimeout(function() { console.log(i) }, i * 1000) }
添加監聽事件
function func() { var element = document.getElementById("app"); element.onclick = function() { alert(element.id); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106060.html
摘要:也許最好的理解是閉包總是在進入某個函數的時候被創建,而局部變量是被加入到這個閉包中。在函數內部的函數的內部聲明函數是可以的可以獲得不止一個層級的閉包。 前言 總括 :這篇文章使用有效的javascript代碼向程序員們解釋了閉包,大牛和功能型程序員請自行忽略。 譯者 :文章寫在2006年,可直到翻譯的21小時之前作者還在完善這篇文章,在Stackoverflow的How do Java...
摘要:但是閉包也不是什么復雜到不可理解的東西,簡而言之,閉包就是閉包就是函數的局部變量集合,只是這些局部變量在函數返回后會繼續存在。可惜的是,并沒有提供相關的成員和方法來訪問閉包中的局部變量。 (收藏自 技術狂) 前言:還是一篇入門文章。Javascript中有幾個非常重要的語言特性——對象、原型繼承、閉包。其中閉包 對于那些使用傳統靜態語言C/C++的程序員來說是一個新的語言特性。本文將...
摘要:當在中調用匿名函數時,它們用的都是同一個閉包,而且在這個閉包中使用了和的當前值的值為因為循環已經結束,的值為。最好將閉包當作是一個函數的入口創建的,而局部變量是被添加進這個閉包的。 閉包不是魔法 這篇文章使用一些簡單的代碼例子來解釋JavaScript閉包的概念,即使新手也可以輕松參透閉包的含義。 其實只要理解了核心概念,閉包并不是那么的難于理解。但是,網上充斥了太多學術性的文章,對于...
摘要:深入系列第八篇,介紹理論上的閉包和實踐上的閉包,以及從作用域鏈的角度解析經典的閉包題。定義對閉包的定義為閉包是指那些能夠訪問自由變量的函數。 JavaScript深入系列第八篇,介紹理論上的閉包和實踐上的閉包,以及從作用域鏈的角度解析經典的閉包題。 定義 MDN 對閉包的定義為: 閉包是指那些能夠訪問自由變量的函數。 那什么是自由變量呢? 自由變量是指在函數中使用的,但既不是函數參數也...
摘要:一言以蔽之,閉包,你就得掌握。當函數記住并訪問所在的詞法作用域,閉包就產生了。所以閉包才會得以實現。從技術上講,這就是閉包。執行后,他的內部作用域并不會消失,函數依然保持有作用域的閉包。 網上總結閉包的文章已經爛大街了,不敢說筆者這篇文章多么多么xxx,只是個人理解總結。各位看官瞅瞅就好,大神還希望多多指正。此篇文章總結與《JavaScript忍者秘籍》 《你不知道的JavaScri...
摘要:但是,必須強調,閉包是一個運行期概念。通過原型鏈可以實現繼承,而與閉包相關的就是作用域鏈。常理來說,一個函數執行完畢,其執行環境的作用域鏈會被銷毀。所以此時,的作用域鏈雖然銷毀了,但是其活動對象仍在內存中。 學習Javascript閉包(Closure)javascript的閉包JavaScript 閉包深入理解(closure)理解 Javascript 的閉包JavaScript ...
閱讀 1338·2021-11-25 09:43
閱讀 749·2021-11-18 10:02
閱讀 2874·2021-09-07 09:59
閱讀 2756·2021-08-30 09:44
閱讀 2926·2019-08-30 13:17
閱讀 2314·2019-08-29 12:17
閱讀 1680·2019-08-28 17:57
閱讀 1288·2019-08-26 14:04