JavaScript閉包(closure)

閉包(closure)

閉包是javascript語言的一個難點,須要有足夠的邏輯思惟能力。javascript

1、變量的做用域

變量分爲兩種:全局變量和局部變量。java

1.在函數內部是能夠直接讀取到全局變量的,以下:閉包

var  n = 10;
function fn(){
        alert(n);
}
fn();

alert結果爲10.

2.在函數外部確定是沒法讀取到函數內的局部變量的,以下模塊化

function f(){
    var n = 20;
}
f(); alert(n); 程序會報錯:n is no defined.

注意:你們在這個地方須要注意是,在函數內部聲明變量的時候,必定加var。若是不加,至關於聲明瞭一個全局變量。函數

2、如何在外部能夠讀取到局部變量了。

咱們這裏就引入這個閉包,來實現,就是在一個函數內在引入一個函數。性能

function f1(){
    var n = 10;
    function f2(){
        alert (n);
    }
    return f2;
}
var result = f1();
result();  
結果就爲:10

3、什麼叫閉包

閉包:就是可以讀取其它函數內部函數的變量。學習

其實能夠簡單的理解爲:定義在一個函數內部的函數,像好比上面例子中的函數f2()。spa

閉包在本質上就是將函數內部和函數外部鏈接在一塊兒的橋樑。code

4、閉包的用處

1.能夠讀取函數內部的變量。blog

2.變量持久化(變量的值始終會保存在內存中)。

function f1(){
    var n = 10;
    return function(){
        n++;
        alert(n);
    }
}
var result = f1();   //外部函數賦給變量result;
result();  //result函數第一次執行,結果爲11;
result();  //result函數第二次執行,結果爲12,實現了累加,

上面這個例子就完美詮釋了變量的持久化。

3.模塊化代碼,減小全局變量的污染。

 

var abc = (function(){   //abc爲外部匿名函數的返回值
    var a = 1;
    return function(){
        a++;
        alert(a);
    }
})();
abc();  //2 ;調用一次abc函數,實際上是調用裏面內部函數的返回值  
abc();  //3

 

5、使用閉包應注意的問題

1.因爲閉包會使函數內部中的變量都保存在來,內存消耗很大。因此不能濫用閉包,不然會形成網頁的性能問題。

 

6、最後告訴你們:其實閉包是Javascript語言的一個難點,也是它的特點,不少高級應用纔會用到閉包,因此剛學的同窗不懂也不要着急,在之後的不斷學習中,會慢慢理解的!

相關文章
相關標籤/搜索