Javascript 作用域和闭包-在另一个匿名函数中返回匿名函数?

Javascript 作用域和闭包-在另一个匿名函数中返回匿名函数?,javascript,Javascript,我尝试使用匿名函数来练习闭包和作用域 有4个HTML按钮,单击时,我希望javascript确定它们是什么按钮编号,以及它们被单击了多少次 我不确定这是否是正确的设置 期待您的意见和建议。下面是代码。提前谢谢 var buttons=document.querySelectorAll(“按钮”); 按钮。forEach(功能(按钮){ addEventListener(“单击”,函数(){ 返回(函数(输入){ var增量=0; 返回函数(){ 增量++; 警报(“按钮“+input.text

我尝试使用匿名函数来练习闭包和作用域

有4个HTML按钮,单击时,我希望javascript确定它们是什么按钮编号,以及它们被单击了多少次

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

期待您的意见和建议。下面是代码。提前谢谢

var buttons=document.querySelectorAll(“按钮”);
按钮。forEach(功能(按钮){
addEventListener(“单击”,函数(){
返回(函数(输入){
var增量=0;
返回函数(){
增量++;
警报(“按钮“+input.textContent+”:“+”已被单击“+increment+”次”);
}
})(按钮);
});
});
1
2.
3.

4
当然,匿名函数可以返回其他函数。函数是js中的一等公民。除了
this
属性外,每个嵌入函数都可以访问包络函数的上下文。您可以使用四个forEach函数的上下文来存储增量的数量。当您使用事件侦听器返回某个内容时,我不知道是否在某个地方使用过此返回。它可能只是存在函数

var buttons=document.querySelectorAll(“按钮”);
按钮。forEach(功能(按钮){
var增量=0;
按钮。addEventListener(“单击”),函数(事件){
增量++;
警报(“按钮“+event.currentTarget.innerHTML+”:“+”已单击“+increment+”次”);
}
);
});
1
2.
3.

4
非常感谢。您能否澄清为什么将增量存储在事件侦听器之外?我想,一般来说,我们不希望变量和增量处于相同的状态。。错误范围?正如您所看到的,我仍在努力掌握基本知识:)存储在作用域中的变量只能在该作用域中生存。如果要在事件侦听器func中声明增量,则该函数退出时将被删除。即使您编写“var increment=increment | | 0;”在我的示例中,增量生命在forEach函数的作用域中,该作用域是事件侦听器的父作用域。函数不会忘记它们的父作用域。