閉包理解
閉包的兩種應用情況:
- 函數作為返回值
function fn(){
var max = 10;
return function bar(x){
if(x > max){
document.write(x);
}
};
}
var f1 = fn();
f1(15);
bar函數作為返回值,賦值給f1變量
- 函數作為參數被傳遞
var max = 10;
fn = function(x){
if(x > max){
document.write(x)
}
};
(function(f){
var max = 100;
f(15);
})(fn);
fn函數作為一個參數被傳遞進入另一個函數,賦值給f參數.執(zhí)行f(15)時,max變量的取值是10,而不是100
瀏覽器的預處理
document.write(a);//默認值undefined;
var a = 10;
等價于
var a;
document.write(a);
a = 10;
document.write(f1);//function f1(){}
function f1(){}//函數聲明
document.write(f2);//undefined
var f2 = function(){};//函數表達式
小例子
function a(){
var n = 1;
nAdd = function(){
n += 1;
}
function b(){
alert(n);
}
return b;
}
//var result = a();
//result();
//nAdd();
//result();
a()();