• 循环绑定多个事件--闭包


    首先说明一下错误写法每次都弹出5的原因:
    for(var i=1;i<=4;i++){
    //给下面这行的i叫“第一个i”
                $("#addShopCar"+i).click(function () {
    //给下面这行的i叫“第二个i”
                    alert(i);
                })
            }
    
    其实原因就是每次循环里,第一个i是确定赋值了的,而第二个i,由于它本身处在一个函数定义中,在真正被调用之前他都会随着循环计数器中的i的变化而变化。
    如果想让每个循环绑定的函数弹出的i是不一样的i,就要在定义之后立即执行,而不是等弹出的时候所有i走了一遍,i就已经变成5了。

    也就是说,在函数定义里的变量,是会变的。要想让他变成某个具体的数,就要在当他等于那个具体的值时立即执行它。

    在想要i是某个值时立即执行它,也就是变成下面这样:
            for(var i=1;i<=4;i++){
                $("#addShopCar"+i).click((function () {
                    alert(i);
                })());
            }
    
    但这样会导致页面一加载就执行每个循环里面的函数,连续弹出1,2,3,4。
    所以就想了个办法,让每次循环中的函数都在这个循环里执行:
            for(var i=1;i<=4;i++){
                (function (m) {
                    $("#addShopCar"+i).click(function () {
                        alert(m);
                    });
                })(i);
            }
    
    这里,虽然click事件绑定的
    function () {
         alert(m);
    }
    
    里,m依然是会随着外面的m的变化而变化的,但外面的m,在每个循环里都立即执行了一次,也就是说赋给绑定在click事件上的m的是每次都不同的。
  • 相关阅读:
    人民币对美元汇率的大数据分析与预测【完整代码】
    碧瑶答疑网——用户使用手册和反馈
    碧瑶答疑网—系统设计和任务分配
    碧瑶答疑网之选题报告
    碧瑶答疑网-软件需求规格说明书
    UEgCWbGGLA
    https://www.cnblogs.com/ggzjf/
    66666
    继承-代码块-接口
    人民币对澳元汇率的大数据分析与预测
  • 原文地址:https://www.cnblogs.com/Jasonellen/p/5777605.html
Copyright © 2020-2023  润新知