什么是闭包?
**简单讲,闭包是指有权访问另一个函数作用域中的变量的函数**
闭包的作用
1.可以在函数的外部访问到函数内部的局部变量
2让这些变量始终保存在内存中,不会谁着函数的结束而自动销毁
(即:闭包是可以在另一个函数的外部访问到其作用域中的变量的函数。而被访问的变量可以和函数一同存在。即使另一个函数已经运行结束,导致创建变量的环境销毁,也依然会存在,直到访问变量的那个函数销毁)
闭包的注意事项
1.通常 ,函数的作用域及其所有变量都会在函数执行结束后被销毁。但是在创建了一个闭包后,这个函数的作用域就会一直保存到闭包不存在为止。
2.闭包只能取得包含函数中任何变量的最后的一个值,这是因为闭包所保存的是整个变量对象,而不是莫个特殊的变量。
function fn (){
var arr = [];
for( var i = 0; i < 6 ; i++){
arr[i] = function(){
console.log(i);
}
}
return arr
}
var Arr1 = test1();
Arr1r[0]();//6
Arr1[1]();//6
Arr1[2]();//6
...
闭包的应用
在任何函数中定义的变量,都可以认为是私有变量,因为不能在函数外部访问这些变量。私有变量包含函数的参数,局部变量和函数内定义的其他函数。
匿名函数最大的用途是创建闭包,并且还可以构建命名空间,以减少全局变量的使用。从而使用闭包模块化代码,减少全局变量的污染。
var count=10;//全局作用域 标记为flag1
function add(){
var count=0;//函数全局作用域 标记为flag2
return function(){
count+=1;//函数的内部作用域
alert(count);
}
}
var s=add()
s();//1
s();//输2
闭包的缺陷
1闭包的缺点就是常驻内存会增大内存使用量,并且使用不当很容易造成内存泄露。
2如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。