闭包

变量作用域

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

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 @   鼓舞飞扬  阅读(142)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示