zoukankan      html  css  js  c++  java
  • 闭包的应用案例

    1、如何在循环中给事件中的变量赋值

    for (var i = 0; i < 10; i++) { //给按钮btn1 - btn10弹出一个序号提示框

      $('.btn' + i).click(function() {

        alert(i); //当我们给一个控件组附加事件时,想当然的会这样做

      });

    }

    但实际点所有按钮都只会弹出显示“9”,也很容易想明白,i 作为一个变量在循环中不断被改变,最终alert时自然只能得到 i 当前的值。

    我们知道 (function() {})(); 这种形式的函数会被立刻实行,并形成一个闭包,那么利用这个原理用闭包解决办法如下:

    for (var i = 0; i < 10; i++) { //给按钮btn1 - btn10弹出一个序号提示框

      (function(j) {

        $('.btn' + j).click(function() {

          alert(j); //此时这是匿名方法形成了一个闭包,i 传进来后就被本地化了,与外部的 i 值再无关联

        })

      })(i);

    }

    深入思考一下,在第一个例子中照理说 i 在循环结束后应该被释放,但因为事件中用到了,于是 for 循环中的 i 其实也形成了一个闭包,这就是为什么异步事件的事件中还能取到 i 的值。

  • 相关阅读:
    += 和 =+
    Ubuntu分区方案(菜鸟方案、常用方案和进阶方案)
    Apache ab测试工具使用方法(无参、get传参、post传参)(转)
    硬盘安装ubuntu遇到的问题
    Promise
    A Kill Cord for your Laptop
    python 2week
    PDCA循环原理
    python自学基础1week
    14链表中倒数第k个结点
  • 原文地址:https://www.cnblogs.com/islee/p/8007000.html
Copyright © 2011-2022 走看看