JavaScript學習之-閉包(closure)

JavaScript閉包是在應用中會經常使用的功能,在面試過程中也會遇到,因此對閉包做一個記錄:

一、變量的作用域

       JavaScript基本變量類型: Undefined、 Null、 Boolean、 Number 和 String。這 5 種基本數據類型是按值訪問的,因爲可以操作保存在變量中的實際的值。
二、從外面讀取內部變量

       正常情況下我們是得不到函數內部變量的,但是可以使用閉包。函數內部在定義一個函數

      比如在一次面試中遇到的問題就是不使用全局變量,使一個函數奇數次輸出0,偶數次輸出1,當時對於閉包沒有這麼深刻的理解,現在總結一下:

function time(){
    var i = 0;
    function intime(){       
        i++;
        return i%2;
    }

    return intime;
}
//調用賦值給一個變量 否則不起作用
var result = time();

result();
result();
result();

換個方式 閉包輸出intime();

//返回 function();
function time2(){
    var j =0;
    function intime2(){
        j++;
        return j%2;
    }
    return intime2();
}

var result2 = time2();

發現只輸出1,數字不會改變,發生這種情況的原因應該可用前面的變量被回收解釋。

再改變賦值的類型

//返回 function();
function time3(){
    var k =0;
    function intime3(){
        k++;
        return k%2;
    }
    return intime3();
}

var result3 = time3;

輸出的值依舊無變化

 

三、閉包的概念

      較爲不專業的理解就是能夠讀取其他函數的函數就稱爲閉包,在本質上就是將內部函數與外部函數鏈接起來的函數

四、閉包的作用

      1、可以讀取函數內部的局部變量;2、讓變量的值保持在內存中

五、閉包使用注意點

      1、由於閉包不使用會一直保存在函數內部,因此需要在不適用時清除變量;

      2、閉包會改變父函數的變量值,若將父函數當作對象(Object)來使用,閉包作爲公用方法時,不要隨意改變內部變量值。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章