JS閉包的做用和使用方法

閉包的概念: javascript

        閉包是能夠包含自由(未綁定到特定對象)變量的代碼塊;這些變量不是在這個代碼塊內或者任何全局上下文中定義的,而是在定義代碼塊的環境中定義(局部變量)。「閉包」 一詞來源於如下二者的結合:要執行的代碼塊(因爲自由變量被包含在代碼塊中,這些自由變量以及它們引用的對象沒有被釋放)和爲自由變量提供綁定的計算環境(做用域)。在編程領域咱們能夠通俗的說:子函數可使用父函數中的局部變量,這種行爲就叫作閉包! java

閉包的做用: 編程

    在說閉包的做用以前,讓咱們來先看看下面一段代碼:
閉包

<script type="text/javascript">
    function test1(){
        var i=0;
        function test2(){
            alert(++i);
        }
        return test2;
    }
    var temp = test1();
    temp();
</script>
運行這段代碼後,咱們發現,彈出窗的結果是:1。


    如今,讓咱們慢慢分析這段代碼。首先,代碼自上而下執行,第一部:執行了temp=test1()之後,temp實際上等同於test2;第二部:執行了temp函數;很明顯,打印出的1必定是執行了test2這個函數的結果,可是變量i的聲明是在test1內部,而執行temp函數是在test1外部,這就關係到一個變量的做用域問題。在JS中,變量按做用域來分分爲局部變量和全局變量兩種,這裏i明明聲明的是一個局部變量,卻能在代碼的全局中獲得其值,這功能是很是強大的。假設咱們在函數的外面寫一句:var m=temp();這樣,咱們就能時時刻刻獲得在函數test1裏聲明並運行的變量i了,這樣就間接的改變了i的做用域,讓i變成了一個」僞全局變量「。
函數

    綜上能夠看出,閉包是能夠改變變量或者函數做用域的函數或者方法,使用閉包能在某些時候輕鬆的獲得咱們想獲得的變量值或者方法。
spa

閉包的使用方法:
code

    通常來講,閉包的使用方法就是在聲明一個變量的下面或者一個方法的內部再聲明一個方法,在這個新聲明的方法裏,咱們利用相對於他自身的」全局變量「進行」運算「,將獲得的值或者結果經過return返回回去,而後在整個函數或者方法的外面去接收這個返回值,使在函數內部聲明的變量或方法能在函數外面被利用,這樣的使用方式就是閉包的使用方法。如同上面的函數test2同樣,在test2裏面去處理i,而後在test1外面去申明一個變量m=temp();用以接收變量i處理後的值,這個就實現了閉包的過程。
對象

相關文章
相關標籤/搜索