闭包理解
闭包的两种应用情况:
- 函数作为返回值
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参数.执行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()();