有工作經驗的前端都知道,面試時基本都會問下js閉包問題,考查下你的js基礎水平。作為新手前端剛入門的你,這個前端面試必備知識點,你會嗎?不會的話,就趕快看下吧,補補課吧。
1.閉包的概念:
閉包就是一個函數,兩個函數彼此嵌套,內部函數就是閉包形成閉包條件是內部函數需要通過return給返回出來。
看下面的代碼,你就懂了:
function f1(){
function f2(){
alert("我是js閉包!");
}
return f2;
}
var f=f1();
f(); //彈出:我是js閉包!
2. 閉包特點
閉包有權利調用其上級環境的變量信息。父級環境的信息已經固化為本身AO的成員了。
看下代碼,更好理解:
function f1(){
var bb = "閉包";
function f2(){
alert('我是'+bb);
}
return f2;
}
var f = f1();
f(); //彈出:我是js閉包
3. 閉包使用規則
同一個閉包機制可以創建多個閉包函數出來,它們彼此沒有聯繫,都是獨立的。
並且每個閉包函數可以保存自己個性化的信息。
看下代碼,理解下三個閉包彼此獨立、沒有聯繫:
function f1(num){
function f2(){
alert('數字:'+num);
}
return f2;
}
var fa = f1(10);
var fb = f1(20);
var fc = f1(30);
fa(); //數字:10
fb(); //數字:20
fc(); //數字:30
4. 閉包的使用例子,加深理解閉包
//創建數組元素
var num = new Array();
for(var i=0; i<4; i++){
//num[i] = 閉包;//閉包被調用了4次,就會生成4個獨立的函數
//每個函數內部有自己可以訪問的個性化(差異)的信息
num[i] = f1(i);
}
function f1(n){
function f2(){
alert(n);
}
return f2;
}
num[2](); //2
num[1](); //1
num[0](); //0
num[3](); //3
閱讀更多 湯久生前端 的文章
關鍵字: 知識點 JavaScript 面試