閉包是什麼?怎麼形成一個閉包?為什麼使用閉包?
阿新 • • 發佈:2018-12-23
在很多情況下我們會遇到閉包這個問題,也有很多人不太理解閉包以及閉包的形成,下面就給大家簡單說下閉包。
首先說什麼是閉包,閉包就是 有權訪問另一個函式作用域變數的函式都是閉包,讓我們舉個例子
在我們寫程式碼的時候遇到一個函式,這是正常函式的寫法:
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出去