js闭包(函数内部嵌套一个匿名函数:这个匿名函数可将所在函数的局部变量常驻内存)
一、总结
1、闭包:就是在一个函数内部嵌套一个匿名函数,这个匿名函数可以访问这个函数的变量。
二、要点
闭包 闭包的相关概念
- 闭包的英文单词是closure,是指有权访问另一个函数作用域中变量的函数。
- 在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕。
- 这是JavaScript中非常重要的一部分知识,因为使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。
注:这些概念了解即可,接下来我们将通过实例来进行了解。
闭包的相关知识点
- 常见的方式是在函数内部创建另一个函数
- 闭包的第一个用途:通过闭包可以访问局部变量
- 闭包的第二个用途:可以让局部变量的值始终保持在内存中
- 优点:可以把局部变量驻留在内存中,可以避免使用全局变量;
全局变量在复杂程序中会造成许多麻烦(比如命名冲突,垃圾回收等),所以推荐使用私有的,封装的局部变量。而闭包可以实现这一点。
- 缺点:由于闭包里作用域返回的局部变量资源不会被立刻销毁回收,所以可能会占用更多的内存;所以过度使用闭包会导致性能下降;
- 优点:可以把局部变量驻留在内存中,可以避免使用全局变量;
- 循环函数中的匿名函数和闭包问题
三、代码
1 <!DOCTYPE html> 2 <html lang="zh-cn"> 3 <head> 4 <meta charset="utf-8"> 5 <title>课堂演示</title> 6 </head> 7 <body> 8 <script> 9 /* 10 function myfn(){ 11 12 return function (){ 13 14 return('**********') 15 16 } 17 } 18 19 //alert(myfn) //输出整个函数表达式 20 //alert(myfn()) //输出匿名函数表达式 21 22 //调用方式1 23 alert(myfn()()) 24 25 //调用方式2 26 var bb=myfn() 27 alert(bb()) 28 29 //通过闭包访问局部变量 30 31 function myfn(){ 32 var bb='局部变量bb' 33 } 34 alert(bb) // 局部变量函数外无法访问 35 */ 36 function myfn(){ 37 38 var bb='局部变量bb' 39 40 return function (){ 41 42 return(bb) // 通过匿名函数返回myfn()的局部变量bb; 43 44 } 45 } 46 47 //调用方式1 48 //alert(myfn()()) 49 //调用方式2 50 var csbb=myfn() 51 alert(csbb()) 52 </script> 53 </body> 54 </html>