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


    首先说明一下错误写法每次都弹出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的是每次都不同的。
  • 相关阅读:
    chrome 插件备份
    github下载单个文件
    idea插件备份
    外卖类应用的竞争与趋势
    使用终端和Java API对hbase进行增删改查操作
    分布式文件系统的布局、文件查找
    Java上机实验报告(4)
    Java上机实验报告(3)
    Java上机实验报告(2)
    Java上机实验报告(1)
  • 原文地址:https://www.cnblogs.com/Jasonellen/p/5777605.html
Copyright © 2020-2023  润新知