闭包

变量作用域

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

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

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

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

什么是闭包

闭包,指有权访问另一个函数作用域中变量函数

简单理解就是,一个作用域可以访问另一个函数内部的局部变量。

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>
原文地址:https://www.cnblogs.com/guwufeiyang/p/13172068.html