闭包的两大作用

忘记了是在哪里看到的这个案例讲解,简单明了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>闭包</title>
    <style>
       
    </style>
</head>
<body>
   
</body>
<script>
var count=10;//全局作用域 标记为flag1
function add(){
    var count=0;//函数全局作用域 标记为flag2
    console.log(count)
    return function(){
        count+=1;//函数的内部作用域
        alert(count);
    }
}
var s=add()
console.log(s)
s();//输出1
s();//输出2


function add1(){
    var count1=0;//函数全局作用域
    return function(){
        count1+=1;//函数的内部作用域
        alert(count1);
    }
}
add1()();//输出1
add1()();//输出1


//它的用处有两个,一个是前面提到的可以读取函数内部的变量
function f1(){
 var n=999;
 function f2(){
  alert(n);
 }
 return f2;

}
var result=f1();
result(); // 999

//另一个就是让这些变量的值始终保持在内存中。
function f3(){
 var n=999;
 nAdd=function(){n+=1}
 function f4(){
  alert(n);
 }
 return f4;
}
var result=f3();
result(); // 999
nAdd();
result(); // 1000
// 为什么会这样呢?原因就在于f3是f4的父函数,而f3被赋给了一个全局变量,这导致f3始终在内存中,而f4的存在依赖于f3,因此f4也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。
</script>
</html>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值