范围和闭包 - 在另一个匿名函数中返回匿名函数?

时间:2018-01-13 12:13:37

标签: javascript

我正在尝试使用匿名函数来练习闭包和范围。

有4个HTML按钮,点击后,我希望javascript识别它们是什么按钮编号,以及它们被点击的次数。

我不确定这是否正确设置。

期待您的意见和建议。以下是代码。在此先感谢!!

var buttons = document.querySelectorAll("button");

buttons.forEach(function(button){
  button.addEventListener("click", function(){
    return (function(input){
      var increment = 0;
      return function(){
      increment++;
        alert("button " + input.textContent + ":" + " has been clicked " + increment + " times." );
      }
    })(button);
  });
});
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>

1 个答案:

答案 0 :(得分:2)

当然,匿名函数可以返回其他函数。职能是js中的一等公民。除this属性外,每个嵌入式函数都可以访问包络函数的上下文。您可以使用四个forEach函数的上下文来存储增量数。当你从一个事件监听器返回一些东西时,我不知道这个返回是否曾被用于某个地方。它可能只是存在功能。

&#13;
&#13;
    var buttons = document.querySelectorAll("button");
    
    buttons.forEach(function(button){
      var increment = 0;
      button.addEventListener("click", function(event){
        increment++;
          alert("button " + event.currentTarget.innerHTML + ":" + " has been clicked " + increment + " times." );
         }
       );
    });
&#13;
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
&#13;
&#13;
&#13;