高阶函数
高阶函数是可以将函数作为参数,或是将函数作为返回值的函数。
什么是闭包?
闭包:提供给外部作用域访问内部作用域数据的方法叫做闭包。闭包是一个函数,闭包是JavaScript的高级特性,它的实现得益于高阶函数的特性:函数可以作为参数或者返回值。
示例的代码如下:
var foo = function(){
var bar = function(){
var local = "局部变量";
return function (){
return local;
};
};
var baz = bar();
console.log(baz());
};
一般而言,在bar()函数执行完成后,局部变量local将会随着作用域的销毁而被回收,但是注意这里的特点在于返回值是一个匿名函数,且这个函数具备访问local的条件。虽然在后续的执行中,在外部作用域中还是无法直接访问它,但是若要访问它,只要通过这个中间函数稍作周转即可。
闭包的问题在于:一旦有变量使用这个中间函数,这个中间函数将不会释放,同时也会使原始的作用域不会得到释放,作用域中产生的内存占用也不会得到释放。