国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

淺談JavaScript閉包

hsluoyz / 2805人閱讀

摘要:但是函數返回了內部函數,內部函數會隨時訪問變量所以垃圾回收機制是不會回收函數的內部作用域的,這就是閉包的含義。也就是函數在定義的詞法作用域以外的地方被調用,閉包使得函數可以繼續訪問定義時的詞法作用域。

  初學JavaScript閉包時,閉包這個概念在我眼里及其的神秘,也不知道這個東西在講什么,尤其某些地方的閉包概念定義的非常抽象,屬于那種本來你可能明白這個概念,看了反而又把你給繞糊涂了,學習了這么長時間的JavaScript,看了不少的書,對閉包的這個概念也算是稍稍有點體會的了,這里順便推薦兩本書《你不知道的JavaScript》和《JavaScript忍者秘籍》。
  之前有次面試的時候,面試官讓我寫一個閉包的例子,我就寫了下面的代碼:

var a = 100;
(function(){
    console.log(a); //100
})();

上面這個例子從廣義上講確實算是一個閉包的例子,但是實質上講其實算是一個詞法作用域的例子,其中涉及到RHS。但卻不是一個很合適的講述閉包的例子,后面看到一個例子算是一個比較好解釋閉包的代碼:

function fn(){
    var a = 100;
    function func(){
        console.log(a);
    }
    return func;
}

var func = fn();
func(); //100

  這個例子才算是一個比較好的閉包的概念。

當函數可以記住并訪問所在的詞法作用域時,就產生了閉包,即使函數是在當前的詞法作用域之外的執行的。

  上面這個概念是引申自《你所不知道的JavaScript》中,變量a定義在函數fn()的作用域中,并且函數fn()中含有一個內部函數func(),內部函數func()持有對變量a的引用。在正常情況下,當函數func執行后就,內部的變量就會被垃圾回收機制所回收(比如變量a)。但是函數fn()返回了內部函數func(),內部函數func()會隨時訪問變量a,所以垃圾回收機制是不會回收函數fn()的內部作用域的,這就是閉包的含義。也就是

函數在定義的詞法作用域以外的地方被調用,閉包使得函數可以繼續訪問定義時的詞法作用域。

  現在你對閉包的理解會不會有種恍然大悟的感覺呢?如果沒有?那建議看看《你所不知道的JavaScript》和《JavaScript忍者秘籍》這兩本書,里面對閉包講解的都非常的棒。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/81142.html

相關文章

  • 淺談JavaScript中的閉包

    摘要:在內部,理所當然能訪問到局部變量,但當作為的返回值賦給外的全局變量時,神奇的事情發生了在全局作用域中訪問到了,這就是閉包。而閉包最神奇的地方就是能在一個函數外訪問函數中的局部變量,把這些變量用閉包的形式放在函數中便能避免污染。 一、閉包是什么? 《JavaScript高級程序設計》中寫道:閉包是指有權訪問另一個函數作用域中的變量的函數,如果用下定義的觀點看,這句話就是說閉包是函數,我...

    Riddler 評論0 收藏0
  • 淺談Javascript閉包和匿名函數【1】

    摘要:我們可以用普通函數內部嵌套匿名函數,形成一個閉包來使變量駐留在內存中。局部變量閉包為什么要將賦值給變量呢這里我們就要談到匿名函數調用問題匿名函數如何調用還是上面的例子會將整個函數體打印出來這樣才調用了函數內部的匿名函數看到這里。 閉包含義: 閉包是指有權訪問另一個函數作用域中的變量的函數,創建閉包的常見的方式,就是在一個函數內部創建另一個函數,通過另一個函數訪問這個函數的局部變量。 這...

    cyqian 評論0 收藏0
  • 淺談Javascript閉包中作用域及內存泄漏問題

    摘要:將作用域賦值給變量這里的作用域是,而不是將作用域賦值給一個變量閉包返回瀏覽器中內存泄漏問題大家都知道,閉包會使變量駐留在內存中,這也就導致了內存泄漏。 上一章我們講了匿名函數和閉包,這次我們來談談閉包中作用域this的問題。 大家都知道,this對象是在運行時基于函數的執行環境綁定的,如果this在全局就是[object window],如果在對象內部就是指向這個對象,而閉包卻是在運行...

    source 評論0 收藏0
  • 云天視角-淺談閉包

    摘要:函數在執行的時候執行函數,將當前的變量對象由于當前的環境是函數,所以將其活動對象作為變量對象添加到作用域鏈的前端。此時,由于在執行,而作用域鏈也存在,所以可以在作用域鏈上進行查找,去訪問的變量。 一、現狀 閉包是jser繞不過的坎,一直在都在說,套用 simpson 的話來說:JavaScript中閉包無處不在,你只需要能夠識別并擁抱它。 閉包是基于詞法作用域書寫代碼時的自然結果,你甚...

    nanfeiyan 評論0 收藏0
  • 淺談JavaScript閉包的理解

    摘要:關于循環和閉包當循環和閉包結合在一起時,經常會產生讓初學者覺得匪夷所思的問題。閉包是一把雙刃劍是比較難以理解和掌握的部分,它十分強大,卻也有很大的缺陷,如何使用它完全取決于你自己。 在談閉包之前,我們首先要了解幾個概念: 什么是函數表達式? 與函數聲明有何不同? JavaScript查找標識符的機制 JavaScript的作用域是詞法作用域 JavaScript的垃圾回收機制 先來...

    missonce 評論0 收藏0

發表評論

0條評論

hsluoyz

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<