91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

好程序員技術分享淺談JavaScript中的閉包

發布時間:2020-08-10 22:28:09 來源:ITPUB博客 閱讀:118 作者:好程序員IT 欄目:web開發

好程序員 技術分享 淺談 JavaScript 中的閉包 js 閉包 是指有權訪問另一個函數作用域中的變量的函數 , 個人認為 js 閉包最大的用處就是防止對全局作用域的污染。 試想如果我們把一些僅僅只用到一兩次的變量都聲明在全局作用域中,最后肯定是容易出錯且不可維護的。而閉包最神奇的地方就是能在一個函數外訪問函數中的局部變量,把這些變量用閉包的形式放在函數中便能避免污染。

一、閉包是什么?

JavaScript 高級程序設計》中寫道: “閉包是指有權訪問另一個函數作用域中的變量的函數”,如果用下定義的觀點看,這句話就是說“閉包是函數”,我帶著懷疑的心態又去網上找了找,發現什么說法都有,終究沒能明白閉包的含義,還是看代碼來得直接。 ·

function outter() {

   var  sky= "blue" ;

   function inner() {

     console .log(sky);

  }

 

   return  inner;

} var  result=outter();

result();     //"blue"

這段代碼就包含一個簡單的閉包: outter函數的返回值是一個函數,即inner。inner在outter內部,理所當然能訪問到局部變量sky,但當inner作為outter的返回值賦給outter外的全局變量時,神奇的事情發生了:在全局作用域中訪問到了sky,這就是閉包。

二、閉包的原理 ?

每個函數都有自己的執行環境,當一個函數被執行時,它的執行環境就會被推入環境棧,其活動對象 (存儲環境中定義的變量及函數)加入作用域鏈中,一旦函數執行完,棧將其環境彈出,活動對象被銷毀。

對于上面的例子來說, outter執行完之后將返回inner給了result,outter的執行環境從環境棧彈出,控制權交給全局環境,outter的活動對象理應被銷毀。但此時inner已經存儲在全局活動對象中了,同時inner需要訪問sky,所以outter的活動對象沒有被銷毀,即使result執行完畢,outter的活動對象依然存在于作用域鏈中,只有當result被銷毀

//code from http://caibaojian.com/javascript-closure.htmlresult  = null

outter的活動對象才會徹底釋放。

三、閉包有什么用 ?

說了這么多,閉包到底有什么用呢?我個人認為閉包最大的用處就是防止對全局作用域的污染。   試想如果我們把一些僅僅只用到一兩次的變量都聲明在全局作用域中,最后肯定是容易出錯且不可維護的。而閉包最神奇的地方就是能在一個函數外訪問函數中的局部變量,把這些變量用閉包的形式放在函數中便能避免污染。

四、 Caveat

·  閉包將函數的活動對象維持在內存中,過度使用閉包會導致內存占用過多;

·  閉包只能取得外部函數中任何變量的最后一個值,在使用循環且返回的函數中帶有循環變量時會得到錯誤結果;

·  當返回的函數為匿名函數時,注意匿名函數中的 this指的是window對象。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁南县| 长沙市| 梁平县| 嵊州市| 临城县| 吴堡县| 雷波县| 当雄县| 万载县| 高邑县| 那坡县| 五原县| 沅江市| 大洼县| 壤塘县| 武夷山市| 泾川县| 长泰县| 井研县| 彭水| 厦门市| 衡山县| 宣威市| 改则县| 甘德县| 永安市| 阿鲁科尔沁旗| 文成县| 舞阳县| 防城港市| 清新县| 阿荣旗| 丹凤县| 漳平市| 突泉县| 海口市| 鹤峰县| 鄂托克旗| 景洪市| 乌拉特中旗| 伊春市|