閉包是什麼?怎麼形成一個閉包?為什麼使用閉包?

_isHF發表於2018-03-09

在很多情況下我們會遇到閉包這個問題,也有很多人不太理解閉包以及閉包的形成,下面就給大家簡單說下閉包。

首先說什麼是閉包,閉包就是    有權訪問另一個函式作用域變數的函式都是閉包,讓我們舉個例子

在我們寫程式碼的時候遇到一個函式,這是正常函式的寫法:

                function a( ){
var n=0;
function b( ){
n++;
console.log(n);
}
b( );

a( ); 

而用閉包的寫法是:

                function a(){
var n=0;
function b(){
n++;
console.log(n)

return b;
}
var c=a();
c();
//此時就是讓c等於整個函式a( );而函式a裡的返回值是b,但沒有輸出,只是return出來了而已;

//然後再呼叫函式c( ),意思就是觸發函式c呼叫b的值然後輸出出來值。

這就是怎麼形成一個閉包的寫法。這裡的c函式訪問了建構函式a裡的變數,所以形成了一個閉包。

為什麼使用閉包?

我們知道,JS的每個函式都是獨立的,可以獲取外界資訊,但是外界卻無法直接看到裡面的內容,

我們將變數n放在了函式裡,除了b函式之外,沒有其他的辦法可以接觸到變數n,而且在函式a外定義

同名的變數n也不會受到影響,這就是所謂的“封裝性”

而之所以使用return  返回函式,是因為在函式a外無法直接呼叫b函式

所以return出去

相關文章