闭包

变量作用域

变量根据作用域的不同分为两种:全局变量和局部变量

1、函数内部可以使用全局变量。

2、函数外部不可以使用局部变量。

3、当函数执行完毕,本作用域内的局部变量会销毁。

什么是闭包

包,函数嵌套函数,内层函数可以引用外层函数的参数和变量,参数和变量不会被垃圾回收机制所回收。

闭包的好处:

(1)希望一个变量长期驻扎在内存中;

(2)避免全局变量的污染,私有化成员。

function fn() {
  var num = 10;
  function fun() {
    console.log(num);
  }
  fun();
}
fn(); // 10
 
闭包应用-点击li输出当前li的索引号
 1 <body>
 2   <ul class="nav">
 3     <li>榴莲</li>
 4     <li>臭豆腐</li>
 5     <li>鲱鱼罐头</li>
 6     <li>大猪蹄子</li>
 7   </ul>
 8 <script>
 9 // 闭包应用-点击li输出当前li的索引号
10 // 1. 我们可以利用动态添加属性的方式
11 var lis = document.querySelector('.nav').querySelectorAll('li');
12 for(var i = 0; i < lis.length; i++) {
13   lis[i].index = i;
14   lis[i].onclick = function() {
15     console.log(this.index);
16   }
17 }
18 // 2. 利用闭包的方式得到小li的索引号
19 for(var i = 0; i < lis.length; i++) {
20   // 利用for循坏创建了4个立即执行函数
21   // 立即执行函数也称为小闭包,因为立即执行函数里面的任何一个函数都可以使用它的i这个变量
22   (function(i) {
23     lis[i].onclick = function() {
24       lis[i].onclick = function() {
25         console.log(this.index);
26       }
27     }
28   })(i);
29 }
30 </script>
31 </body>

 

posted @ 2020-06-21 12:44  鼓舞飞扬  阅读(136)  评论(0编辑  收藏  举报