闭包 Clousure
参考:http://caibaojian.com/javascript-closures.html?fid=776%230-tsina-1-25974-397232819ff9a47a7b7e80a40613cfe1
定义:有权访问另一个函数作用域中的变量的函数
特性
函数的局部变量在函数返回之后仍然可用
栈上的内存空间在函数返回之后仍在存在,不被回收
创建闭包
在一个函数内部创建另一个函数,如下:
function getNum() {
var num = 1;
return function(){
return num;
}
}
var num = getNum();
alert(num());
num = null;
使用闭包注意点
使用闭包可以将局部变量驻存在内存中,避免使用全局变量造成的内存污染,但是闭包作用域返回的局部资源变量不会被立即销毁和回收,因此可能会占用更多的内存,因此在使用完闭包后要解除变量的引用,如 num = null , 尽量仅在非常有必要时才使用闭包。
闭包小结
1、 两种情况:闭包的返回值是一个函数,它其中使用了该闭包的局部变量;
闭包内定义了内部函数,内部函数引用了闭包的局部变量
2、每次函数调用,都会生成一个新的闭包,分配新的内存