微信扫一扫打赏支持

js闭包(函数内部嵌套一个匿名函数:这个匿名函数可将所在函数的局部变量常驻内存)

js闭包(函数内部嵌套一个匿名函数:这个匿名函数可将所在函数的局部变量常驻内存)

一、总结

1、闭包:就是在一个函数内部嵌套一个匿名函数,这个匿名函数可以访问这个函数的变量。

 

二、要点

闭包 闭包的相关概念

    • 闭包的英文单词是closure,是指有权访问另一个函数作用域中变量的函数。
    • 在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕。
    • 这是JavaScript中非常重要的一部分知识,因为使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。

注:这些概念了解即可,接下来我们将通过实例来进行了解。

闭包的相关知识点

  1. 常见的方式是在函数内部创建另一个函数
  2. 闭包的第一个用途:通过闭包可以访问局部变量
  3. 闭包的第二个用途:可以让局部变量的值始终保持在内存中
    • 优点:可以把局部变量驻留在内存中,可以避免使用全局变量;

      全局变量在复杂程序中会造成许多麻烦(比如命名冲突,垃圾回收等),所以推荐使用私有的,封装的局部变量。而闭包可以实现这一点。

    • 缺点:由于闭包里作用域返回的局部变量资源不会被立刻销毁回收,所以可能会占用更多的内存;所以过度使用闭包会导致性能下降;
  4. 循环函数中的匿名函数和闭包问题

 

 

三、代码

 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>

 

posted @ 2018-05-10 03:10  范仁义  阅读(724)  评论(0编辑  收藏  举报