闭包
- 通俗来说: 闭包就是函数里return了一个新的函数
- 本质来说: 当前环境中存在指向父级作用域的引用
作用
- 可以越过作用域链的限制在外层拿到里层的变量属性
function fun1() {
var a = 1;
return function(){
console.log(a);
};
}
fun1();
var result = fun1();
result(); // 1
// 抛出来一个疑惑,fun1()函数被调用完成后,这个a属性值存在哪里去了
// 其实a的属性值存储在fun1函数的scope作用域链上面 (console.dir(fun1))
- 函数的另一个用途是使已经运行结束的函数上下文中的变量对象继续留在内存中,因为闭包函数保留了这个变量对象的引用,所以这个变量对象不会被回收。
用途
- 封装私有变量
- 防抖节流也都借鉴了闭包的思想