闭包函数

闭包的概念

1、如何产生闭包?

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

2、闭包到底是什么?

3、产生闭包的条件是什么?

函数嵌套,内部函数引用了外部函数的数据(变量/函数)

业务需求:

点击按钮,显示点击的是第几个按钮。


错误的效果

代码如下:

      // 需求:点击按钮,显示按钮顺序
      var btns = document.getElementsByClassName("btn");
      for (var i = 0; i < btns.length; i++) {
        var btn = btns[i];
        btn.onclick = function() {
          alert("点击第" + (i + 1) + "个按钮");
        };
      }

问题分析:

我们不难发现,对于你输出的结果都是以 i=4 输出的,并不是我们想要的结果。


问题解决:

遇见这种情况,我们可以使用闭包函数来解决。我们使用一个新的函数将外部的变量传给内部的函数即可。代码修改如下:

      var btns = document.getElementsByClassName("btn");
      for (var i = 0; i < btns.length; i++) {
        var btn = btns[i];
          (function(k) {
              btn.onclick = function() {
                alert("点击第" + (k + 1) + "个按钮");
              };
            })(i);
      }
正确的效果

你可能感兴趣的:(闭包函数)