🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 1. 什么是闭包 通过函数嵌套函数,闭包是函数对局部变量的持有关系,闭包有两个主要作用: 1. 访问内部变量(函数内的变量,外部无法访问) 2. 因为将内部函数复制给全局变量,全局变量让局部变量生命时间变得和全局变量一样 例如: ~~~ function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 ~~~ f2是内部函数,并作为参数返回给了一个全局变量。f2持有局部变量n。因为全局变量指向内部函数f2,f2持有局部变量n,所以局部变量n不会因为函数的执行结束而被销毁,这就是闭包。 ## 2. 如何使用闭包 1. 将匿名函数复制给全局变量(不使用var定义) 2. 将内部函数以参数的形式返回(赋值给全局变量) 最终都是让全局变量引用内部的一个函数 ~~~ function f1(){ var n=999; nAdd=function(){n+=1} //没有使用var,所以是一个全局变量 function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000 ~~~ 1. nAdd是一个全局变量,引用了一个内部匿名函数,所以nAdd也是一个闭包。 2. result作为一个全局变量,引用了f2函数,故是一个闭包