11.闭包的生命周期.html 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <!--
  11. 1、产生:在嵌套内部函数定义执行完时就产生了(不是在调用)
  12. 2、死亡:在嵌套的内部函数成为垃圾对象时
  13. -->
  14. <script>
  15. function fn1() {
  16. //此时闭包就已经产生了(函数提升,内部函数对象已经创建了)
  17. var a = 2
  18. function fn2() {
  19. a++
  20. console.log(a)
  21. }
  22. return fn2
  23. }
  24. var f = fn1()
  25. f() //3
  26. f() //4
  27. f = null //闭包死亡(包含闭包的函数对象成为了垃圾对象
  28. function fn1() {
  29. //此时闭包就已经产生了(函数提升,内部函数对象已经创建了)
  30. var a = 2
  31. var fn2 = function () {
  32. a++
  33. console.log(a)
  34. }
  35. //此时闭包产生(函数定义完成后产生)
  36. return fn2
  37. }
  38. var f = fn1()
  39. f() //3
  40. f() //4
  41. f = null //闭包死亡(包含闭包的函数对象成为了垃圾对象
  42. </script>
  43. </body>
  44. </html>