1 闭包是定义在函数内部的函数,换句话说,闭包就是可以访问函数内部变量的函数
特点:
- 函数嵌套函数,闭包一定有嵌套函数。
闭包的作用就是需要使用局部变量,延长变量生命周期 - 外层函数一定定义局部变量,内层函数要操作这个变量。
- 外层函数一定要把内层返回出去,用return
function foo(){ var num = 0 return function(){ num++ return num } } var fn = foo() console.log(fn())
应用场景之一
1 通过外部操作函数内部的数值,并对这个数值进行一定的累加操作。
2 递归也是闭包闭包的缺点-- 内存泄漏
function foo() { let num = 0 return function foo1() { return num++ } } var f = foo() console.log(f());// 第一次调用 0 console.log(f());// 第二次调用 1 console.log(f());// 第三次调用 2
结果:0 1 2
上面例子可以看出,每一次调用都是在前面的基础上,说明局部变量num 状态都不会变,一直保存在内存中,这样变量就会占用内存,如果变量比较多,可能会导致内存泄漏,解决办法是,及时把不使用的局部两边删除