记录关于闭包的几个例子,网上介绍闭包文章很多,暂时就不作解释。
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'
这些问题如果都理解,那么闭包应该算是比较理解了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。