纪录关于闭包的几个例子,网上引见闭包文章许多,临时就不作诠释。
1.作用域链的延长
var global = 1;
function outer(){
var outer_local = 2;
function inner(){
var inner_local = 3;
return inner_local + outer_local + global;
}
return inner(); //必需return出去
}
inner(); // 6
2.全局函数占位符
var inner; //placeholder
var F = function(){
var b = 'local variable';
var N = function(){
return b;
}
inner = N;
}
F();
inner(); // 'local variable'
3.函数参数
function F(param){
var N = function(){
return param;
};
param++;
return N;
}
var inner = F(123);
inner(); // 124
4.循环中的闭包
function F(){
var arr = [], i;
for(i = 0; i < 3; i++){
arr[i] = function(){
return i;
};
}
return arr;
}
var arr = F();
arr[0](); // 3;
arr[1](); // 3;
arr[2](); // 3;
一般输出0,1,2
的体式格局:
function F(){
var arr = [], i;
for(i = 0; i < 3; i++){
arr[i] = (function(x){
return function(){
return x;
}
}(i));
}
return arr;
}
5.迭代器中的闭包
function setup(x){
var i = 0;
return function(){
return x[i++];
}
}
var next = setup(['a','b','c']);
next(); // 'a'
next(); // 'b'
next(); // 'c'
这些题目假如都明白,那末闭包应当算是比较明白了