30.闭包.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <ul>
  10. <li>1</li>
  11. <li>2</li>
  12. <li>3</li>
  13. <li>4</li>
  14. <li>5</li>
  15. </ul>
  16. <p class="main1">0</p>
  17. <div class="btn1">加一</div>
  18. <br><br><br><br><br>
  19. <div class="main2">1</div>
  20. <div class="btn2">2倍</div>
  21. <!--
  22. 闭包
  23. 什么是闭包:闭包 指 有权访问另一个函数内部的变量
  24. * 什么是闭包:闭包的一大特性就是
  25. 内部函数总是可以访问其所在的外部函数中声明的参数和变量
  26. 外部变量不可以访问内部变量
  27. - 函数嵌套函数
  28. - 内部函数引用外部函数的局部变量
  29. * 闭包的作用:
  30. - 实现函数外部访问私有变量
  31. - 避免全局变量的污染 实现封装
  32. - 希望一个变量长期驻扎在内存中
  33. * 闭包的缺点:容易引发内存泄漏
  34. -->
  35. <script>
  36. /**经典写法*/
  37. // function news() {
  38. // var today = '今天星期五';
  39. // return function() {
  40. // console.log(today)
  41. // }
  42. // }
  43. // var list = news();
  44. // list();
  45. /**自调用写法*/
  46. // var list = (function() {
  47. // var today = '天气真好';
  48. // return function() {
  49. // console.log(today)
  50. // }
  51. // })()
  52. // list();
  53. // function a() {
  54. // console.log("1111")
  55. // }
  56. // a()
  57. // (function() {
  58. // console.log('222')
  59. // })()
  60. // 闭包用法
  61. var uls = document.querySelector('ul');
  62. var lis = document.querySelectorAll("ul li");
  63. for(var i=0;i<lis.length;i++) {
  64. // lis[i].onclick = function() {
  65. // console.log(i);
  66. // }
  67. lis[i].onclick = (function() {
  68. // console.log(i);
  69. var item = i;
  70. return function() {
  71. console.log(item)
  72. }
  73. })()
  74. }
  75. // 计数器
  76. var main1 = document.querySelector(".main1");
  77. var main2 = document.querySelector(".main2");
  78. var btn2 = document.querySelector(".btn2");
  79. var btn1 = document.querySelector(".btn1");
  80. var count2 = 1;
  81. var count1 = 0;
  82. function addCount() {
  83. return function(main1){
  84. count1++;
  85. main1.innerHTML = count1;
  86. }
  87. }
  88. var add = addCount()
  89. btn1.onclick = function() {
  90. add(main1)
  91. }
  92. var vase = (function(){
  93. return function(main2) {
  94. count2 = count2 * 2;
  95. main2.innerHTML = count2;
  96. }
  97. })()
  98. btn2.onclick = function() {
  99. vase(main2);
  100. }
  101. // btn1.addEventListener('click',function() {
  102. // count1++;
  103. // main1.innerHTML = count1;
  104. // })
  105. // btn2.addEventListener("click",function(){
  106. // count2 = count2 * 2;
  107. // main2.innerHTML = count2;
  108. // })
  109. for(var i=0;i<3;i++) {
  110. console.log(i,'aa')
  111. setTimeout(function(){
  112. console.log(i);
  113. },500)
  114. }
  115. </script>
  116. </body>
  117. </html>