手写闭包:闭包的作用、概念、写法案例

本文详细介绍了JavaScript中的闭包概念,强调了其在隐藏变量、防止全局污染以及访问函数内部变量方面的作用。通过三种不同的写法展示了闭包在for循环中的不同表现,解释了为何使用let而非var能正确捕获每个循环的变量值。同时,文章还探讨了如何利用bind方法实现类似的功能,强调了预处理机制在闭包应用中的重要性。
摘要由CSDN通过智能技术生成
  1. 闭包

闭包的作用:隐藏变量,避免全局污染;可以读取函数内部的变量。

闭包的概念: 有一个A函数,在A函数内部返回一个B函数;在A函数外部有变量引用这个B函数;B函数内部访问着A函数内部的私有变量。(核心就是利用执行空间不销毁的原理)

写法1:注意输出结果的不同

 for(var i=0;i<10;i++){
     ~function(){
          setTimeout(()=>{
             console.log(i);//10次10 获得执行次数
          },1000)
    }(i);
 }

for(let i=0;i<10;i++){
    ~function(){
       setTimeout(()=>{
          console.log(i);//0~9 获得每一个i
       },1000)
    }(i);
 }

写法2:注意输出结果的不同 

for(var i=0;i<10;i++){
            setTimeout(()=>{
                return ~function(){
                    return console.log(i);//10次10 获得执行次数
                }(i)
            },1000)
}

for(let i=0;i<10;i++){
       setTimeout(()=>{
            return ~function(){
                return console.log(i);//0~9 获得每一个i
            }(i)
       },1000)
}

写法3:用bind

// 可以 基于bind 的预先处理机制: 
          在循环的时候就把每一次执行的函数需要输出的结果, 预先传给函数即可。
    for(var i=0;i<10;i++){
            var fn = function(i){
                console.log(i);//0~9 获得每一个i
            }
            setTimeout(fn.bind(null, i), 1000);
        }
        for(var i=0;i<10;i++){
            var fn = function(){
                console.log(i);//10次10 获得执行次数
            }
            setTimeout(fn.bind(null, i), 1000);
     }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值