闭包的定义
- 是JS中,函数的一种高级应用方式
- 在一个函数的外部,能够访问函数内部局部变量的函数,称为闭包,或者闭包函数。
闭包的特点
- 作用域空间不销毁
- 可以通过闭包语法,从外部访问函数内部变量
- 保护私有变量
好处:减少全局变量,减少内存空间的占用
函数的执行空间
在ES5及以前,函数是区分全局和局部唯一的代码块
函数内的局部变量,会在函数执行完毕后销毁
function fn(){
var a = 10;
consloe.long(a);
}
fn();
每一次函数执行时,代码会重新的载入内存,foo执行完毕后,里面的局部变量会被销毁,内存中的代码被销毁,但是foo还在,代码还在。
function foo(){
var a = 10;
function bar(){
consloe.log(a++);
}
bar();
}
foo();//10
foo();//10
按照之前的理论,a在foo函数外部是访问不到的,但是,因为闭包的存在,导致函数foo的外部能够访问a,并且a还不会被销毁。
function foo(){
var a = 10;
function bar(){
console.log(a++);
}
return bar;
}
//foo();//f执行结果是返回了一个函数bar,有没有输出,就看bar有没有执行。
//foo()();
var num = foo();//num =>function(){console.log(a++)}
num();
num();//此时函数内部没有被销毁仍可访问
垃圾回收机制
垃圾回收机制就是为了清内存,两种方式:标记清除、引用计数
来源:51CTO
作者:wx5a5849600868d
链接:https://blog.51cto.com/13571682/2473335