1. 闭包
闭包的概念
闭包是能够读取其他函数内部变量的函数。在Javascript
中,只有函数内部的子函数能够读取局部变量,因此可以将闭包简单的理解为“定义在一个函数中的函数”。(其实也就是一个内部函数)
闭包的应用
闭包的应用主要有两种情况:
- 函数作为返回值 —— 读取函数内部变量。
function closure() {
var innerVar = 0;
function inner() {
return ++innerVar;
}
return inner;
}
- 函数作为参数传递
延迟调用:作为setTimeout
的参数在指定的时间被调用。
setTimeout(function () {
echo(pclosure1, outer);
}, 10);
定制计算方式:
Array.prototype.map([1, 2, 3], function(num){
return num * 3;
});
闭包还可以封装成一个自执行函数。
闭包的特点
- 一般情况下,函数在调用时就会生成执行上下文环境,函数执行结束后便销毁执行上下文环境及销毁变量,释放内存。
- 闭包是一种能够调用其他函数变量的函数,含有闭包的函数在执行结束后,上下文环境及变量没有被销毁(这样,闭包才能引用函数中的变量),变量存在内存中直到闭包执行结束为止。(垃圾收集机制)
可见,闭包会消耗内存、增大内存开销,同时可能造成内存泄漏,不宜大量使用。