变量作用域
变量根据作用域的不同分为两种:全局变量和局部变量
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>