闭包
闭包是什么
JavaScript允许函数嵌套,并且内部和函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。单数,外部函数却不能访问定义在内部函数中的变量和函数。
当内部函数以某种方式被任何一个外部函数作用域访问时,一个闭包就产生了。
闭包就是词法表示包括不必计算的变量的函数,也就是说,该函数能使用函数外定义的变量。
// 对象与函数
function fn1(){
var v = 100;//局部变量
return {
get : function(){
return v;
},
set : function(value){
v = value;
}
}
}
var obj = fn1();
obj.set(200);
console.log(obj.get());
// 函数与构造函数
function fn2(){
var v = 100;
this.get = function(){
return v;
}
this.set = function(value){
v = value;
}
}
var obj = new fn2();
obj.set(200);
console.log(obj.get());//200
//var n;//全局作用域
var get,set;
function fn3(){
var v = 100;//局部变量
//
get = function(){
return v;
}
set = function(value){
v = value;
}
}
fn3();
set(200);
//console.log(n());//100
function fn1(v){
var v1 = 100;
// consloe.log(v2);
// return v();
v(v1);
}
function fn2(v){
var v2 = 200;
console.log(v);
}
fn1(fn2);
// fn2();
闭包的特点与作用
闭包的特点:
- 局部变量:在函数中定义有共享意义(如:缓存,计算器等)的局部变量。(注:定义成全局变量会对外造成污染)
- 内部函数:在函数(f)中声明内嵌函数,内嵌函数(g)对函数(f)中的局部函数变量进行访问。
- 外部使用:函数(f)向外返回此内嵌函数(g),外部可以通过此内嵌函数持有并访问声明在函数(f)中的局部变量,而此变量在外部是通过其他途径无法访问的。
闭包的作用:
- 提供可共享用的局部变量
- 保护共享的局部变量。提供专门的读写变量的函数。
- 避免全局污染。