JS高级(4)函数高级 — 闭包

🌟 闭包

//循环遍历,给每个按钮都绑定上单击响应函数
var btns = document.getElementsByTagName("button");
for(var i = 0; i< btns.length; i++){ 
//这样写会有一个问题,btns是一个伪数组,其中并不包含length属性,所以每次循环都是在单独计算长度
};
//可以修改为:
for(var i = 0; length= btns.length;  i<length; i++){
//提前提取出length的数值,以免重复计算
    var btn = btns[i];
//将btn对应的索引保存在对应的btn上
    btn.index = i;
    btn.onclick = function(){
    alert("这是第"+ (this.index+1)+"个");
    }
}; //函数在for循环执行之后才单击执行,所以只会显示for循环执行后的i的数值

//也可以利用闭包
for(var i= 0 length = btn.length; i<length; i++){
    (function(i){
        var btn = btn[i];
        btn.onclick = function(){
            alert("这是第"+ (i+1)+"个");
            };
     })(i); //匿名函数立即调用
};

1.如何产生闭包?

当一个嵌套的内部函数引用了嵌套的外部函数的变量时,就产生了闭包。

function fn1(){
    var a = 2;
    function fn2(){
    console.log(a);
        };
};
fn1();
//fn2引用了fn1的变量,所以产生了闭包

2. 闭包到底是什么?

闭包是嵌套的内部函数,即fn2(多数人的理解);闭包包含被引用变量的对象,即fn2中的closure。(少数人的理解)

闭包存在于嵌套的内部函数中。

3. 产生

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值