js閉包的理解-目前網上分析的最透徹文章


js的閉包對於大家實際上並不陌生,但是真正敢說自己完全理解的人並不多。筆者在網上看到分析閉包的文章非常多,篇幅用的非常多,但是實際上分析的並不到位,或者根本就是不正確的。我有時候都在想,寫這些文章的人自己未必真的理解了。今天我就為大家說到說到js的閉包,看完你百分百的能夠理解。

說閉包之前,我們先要說一個js的概念

js的變量不是傳統意義的變量,是一個廣義的概念

例如:

1、var i=0;

2、var str="china";

3、var fun=function(){...}

第1個和第2個大家非常好理解,第3個簡單的解釋一下,它代表的是一個函數表達式,看到了嗎?變量可以是一個函數,它實際上就是一個函數,要使用它直接就是fun();

如果想要了解更多的函數表達式的概念,大家可以去查一下相關資料,網上資料很多,也很容易看得懂。我就不多說了,OK!我講閉包之前先要掌握的概念就是這么多!

 

進入正題:

網上使用最多的一個例子如:

function box(){
    var arr = [];
    for(var i=0;i<5;i++){
        arr[i] = function(){
            return i;                            
        }                                        
    }                                            
    return arr;
}

網上的分析各種詭異看不懂,我直接給出我的結論,調用box()后,我們得到了一個數組,數組中是一個一個的函數表達式:

[

   function(){return i},

   function(){return i},

   function(){return i},

   function(){return i},

   function(){return i}

]

大家不要懵逼,這里很容易理解,我們看這里,在給數組arr賦值的時候,本來就是賦值的一個函數表達式

arr[i] = function(){
return i;
}

大家明白了吧,你自己完全也可以使用alert(box());打印結果進行驗證,大家可能還有一點兒疑惑,我要的是值,不是表達式啊,很簡單,獲取函數表達式的值只需要在變量后面加一個(),所以

alert(box()[0]());結果是5,因為變量i現在的值是5,所以數組中的值都是5.就這么簡單!

 

閉包可以干什么?閉包可以讓外部訪問內部的局部變量

還是以一個例子來解釋:

function test(){
var i=6;
return i;
}

這就是一個最簡單的閉包,局部變量通過函數返回。其它的應用都是類似,萬變不離其宗!



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM