当一个内部函数被调用,就会形成闭包,闭包就是能够读取其他函数内部变量的函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>闭包</title> </head> <body> <script type="text/javascript"> //允许函数中嵌套函数 //内部函数允许调用外部函数的变量 //闭包就是能够读取其他函数内部变量的函数,内部函数和执行的上下文 var foo=function(){ var n=1; return function(){ n=n+1; console.log(n); } } var bar=foo(); bar(); //2 bar(); //3 var foobar=foo(); foobar(); //2 foobar(); //3 </script> </body> </html>
JavaScript语言特有 的链式作用于结构 子对象会一级一级的向上寻找所有父对象的变量
闭包作用:局部变量无法共享和长久的保存,而全局变量可能早曾变量污染 所以我希望有一种机制既可以长久保存变量又不会造成全局污染
特点:占用更多内存;不容易被释放
用法:变量既想反复使用 邮箱避免全局污染
1:定义外层函数 封装被保护的局部变量
2:定义内层函数,执行对外部函数变量的操作
3:外层函数返回内层函数的对象,并且外层函数被调用 结果保存在一个全局变量中
(这样就可以达到内部变量被调用的情况)