什么是闭包?
1、概念
闭包函数
:声明在一个函数中的函数,叫做闭包函数。
闭包
:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回。
先来个案例,一目了之!
var local="变量"
function foo (){ //foo是一个函数
console.log(local) //
}
在函数内部可访问local的变量,称之为闭包
使用return可以实现闭包
例如
:
function foo(){
var local = 1
function bar(){
local++
return local
}
return bar
}
var func = foo()
func()
2、特点
让外部访问函数内部变量成为可能;
局部变量会常驻在内存中;
可以避免使用全局变量,防止全局变量污染;
会造成内存泄漏(有一块内存空间被长期占用,而不被释放)
3、闭包的创建
闭包就是创建一个独立的环境,每个闭包中的环境都是独立的,互不干扰。
闭包会发生内存泄漏,每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址
。
例1:
function funA(){
var a = 10; // funA的活动对象之中;
return function(){ //匿名函数的活动对象;
alert(a);
}
}
var b = funA();
b(); //10
例2:
function fn(){
var a = 3;
return function(){
return ++a;
}
}
alert(fn()()); //4
alert(fn()()); //4
例3:
function f() {
var count = 0;
return function() {
count++;
console.info(count);
}
}
var t1 = f();
t1(); //1
t1(); //2
t1(); //3