概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域
简单理解:闭包=内层函数+引用的外层函数变量
闭包的特点
- 函数嵌套函数。
- 内层函数可以访问外层函数的变量和参数。
闭包的作用
- 防止变量和参数被垃圾回收机制回收(变量持久化)。
- 实现数据私有化,防止变量和参数被外部环境污染。
外部可以通过返回的内部函数使用内部的变量,但是无法直接修改该变量。
闭包的风险
滥用闭包可能导致内存泄漏。外层函数的变量和参数不能被垃圾回收机制回收,应用太多闭包会导致堆积太多的变量和参数,造成内存泄漏。
function counter(){
let count = 0;
return function(){
count++;
console.log(count);
}
}
const fn = counter();
fn(); // 1
fn(); // 2
fn(); // 3
function sum(m){
return function(n){
m+=n
console.log(m);
}
}
const fn = sum(10);
fn(1); // 11
fn(1); // 12
fn(1); // 13
闭包中不一定有return,下面代码2~5行也构成一个闭包。
function outer(){
let a = 1;
function inner(){
console.log(a);
}
inner();
}
outer();