摘要:首先從我們常見的函數開始函數聲明關鍵字聲明一個函數,再指定函數名匿名函數,聲明了函數但沒指定函數名。匿名函數體內形成一個子作用域,這個子作用域可以調用外部作用域的變量,但外部作用域不可以調用子作用域的變量。
首先從我們常見的javascript函數開始:
function funName(){...};//函數聲明,function關鍵字聲明一個函數,再指定funame函數名 function(){...};//匿名函數,聲明了函數但沒指定函數名。 附給一個變量——函數表達式;附給一個事件——事件處理程序(object.onclick=function(){...};);創建閉包... var funName=function(){...}; //函數表達式,將匿名函數附給一個變量。 function funName(){alert("hello world");} funName(); //這樣調用函數 function(){alert("hello World");} (function(){alert("hello World");})(); //這樣直接調用,或者(function(){alert("hello World");}());這兩個沒有區別哦 var fnName=function(){ alert("Hello World"); }(); //函數表達式后加()直接調用 function fnName(){ alert("Hello World"); }(); //報錯
如何傳參
(function(a){alert(a);})(123); new function(a){alert(a);}(123);
結論 X()要想通過加括號直接運行,那么X必須是一個函數表達式。問(function(){alert("hello World");})();中外面的括號是一個分組操作符,會讓解析器強制將JSON的花括號解析成表達式而不是代碼塊。
作用
(function(){...})()稱為閉包。
匿名函數體內形成一個子作用域,這個子作用域可以調用外部作用域的變量,但外部作用域不可以調用子作用域的變量。這樣便不會污染全局變量。
這種方式可以保存閉包外面的變量的狀態
舉例
function fn() { for(var i=0 ; i<2; i++) { var variate= i; setTimeout(function() { alert(variate); }, 2000); } } fn();//1,1 function fn() { for(var i=0 ; i<2; i++) { (function(){ var variate= i; setTimeout(function() { alert(variate); }, 2000); })(); } } fn();//0,1
如有不對,還請指正。本文參考如下二位作者,感謝
鏈接描述
鏈接描述
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86847.html
摘要:也許最好的理解是閉包總是在進入某個函數的時候被創建,而局部變量是被加入到這個閉包中。在函數內部的函數的內部聲明函數是可以的可以獲得不止一個層級的閉包。 前言 總括 :這篇文章使用有效的javascript代碼向程序員們解釋了閉包,大牛和功能型程序員請自行忽略。 譯者 :文章寫在2006年,可直到翻譯的21小時之前作者還在完善這篇文章,在Stackoverflow的How do Java...
摘要:但是閉包也不是什么復雜到不可理解的東西,簡而言之,閉包就是閉包就是函數的局部變量集合,只是這些局部變量在函數返回后會繼續存在。可惜的是,并沒有提供相關的成員和方法來訪問閉包中的局部變量。 (收藏自 技術狂) 前言:還是一篇入門文章。Javascript中有幾個非常重要的語言特性——對象、原型繼承、閉包。其中閉包 對于那些使用傳統靜態語言C/C++的程序員來說是一個新的語言特性。本文將...
摘要:閉包的注意事項通常,函數的作用域及其所有變量都會在函數執行結束后被銷毀。但是,在創建了一個閉包以后,這個函數的作用域就會一直保存到閉包不存在為止。最后通過釋放了和對閉包的引用。從而使用閉包模塊化代碼,減少全局變量的污染。 JavaScript 閉包 原文鏈接 什么是閉包(Closure) 簡單講,閉包就是指有權訪問另一個函數作用域中的變量的函數。 MDN 上面這么說:閉包是一種特殊的...
摘要:當在中調用匿名函數時,它們用的都是同一個閉包,而且在這個閉包中使用了和的當前值的值為因為循環已經結束,的值為。最好將閉包當作是一個函數的入口創建的,而局部變量是被添加進這個閉包的。 閉包不是魔法 這篇文章使用一些簡單的代碼例子來解釋JavaScript閉包的概念,即使新手也可以輕松參透閉包的含義。 其實只要理解了核心概念,閉包并不是那么的難于理解。但是,網上充斥了太多學術性的文章,對于...
摘要:但是,必須強調,閉包是一個運行期概念。通過原型鏈可以實現繼承,而與閉包相關的就是作用域鏈。常理來說,一個函數執行完畢,其執行環境的作用域鏈會被銷毀。所以此時,的作用域鏈雖然銷毀了,但是其活動對象仍在內存中。 學習Javascript閉包(Closure)javascript的閉包JavaScript 閉包深入理解(closure)理解 Javascript 的閉包JavaScript ...
摘要:如何在初學就理解閉包你需要接著讀下去。這樣定義閉包是函數和聲明該函數的詞法環境的組合。小結閉包在中隨處可見。閉包是中的精華部分,理解它需要具備一定的作用域執行棧的知識。 這是本系列的第 4 篇文章。 作為 JS 初學者,第一次接觸閉包的概念是因為寫出了類似下面的代碼: for (var i = 0; i < helpText.length; i++) { var item = he...
閱讀 3672·2021-09-22 15:28
閱讀 1296·2021-09-03 10:35
閱讀 878·2021-09-02 15:21
閱讀 3474·2019-08-30 15:53
閱讀 3496·2019-08-29 17:25
閱讀 569·2019-08-29 13:22
閱讀 1555·2019-08-28 18:15
閱讀 2287·2019-08-26 13:57