Javascript 函数内部的增量全局变量

Javascript 函数内部的增量全局变量,javascript,Javascript,有人能告诉我为什么全局变量没有影响吗?函数中的局部变量起作用。但不是在功能之外 let increment = 0; button.addEventListener("click", function(){ increment++; console.log(increment); // Works! }); console.log(increment); // Not incrementing 这是因为addEventListener是异步工作的。在运行事件侦听器的回调之

有人能告诉我为什么全局变量没有影响吗?函数中的局部变量起作用。但不是在功能之外

let increment = 0;
button.addEventListener("click", function(){
    increment++;
    console.log(increment); // Works!


});

console.log(increment); // Not incrementing

这是因为
addEventListener
是异步工作的。在运行事件侦听器的回调之前,代码最后一行的
console.log
语句被执行,因此
增量的值仍然是0。

此版本可能有助于演示发生了什么:

let increment=0;
const button=document.getElementById('foo');
const output=document.getElementById('output');
const updateOutput=函数(){
output.innerHTML=`值为${new Date().toString().substring(16,24)}`处的${increment};
}
addEventListener(“单击”,函数(){
增量++;
updateOutput();
});
setInterval(updateOutput,1000)
log(`externalcall,value:${increment}`)



增量
您实际调用过该函数吗?例如,按下按钮?按下按钮时是,函数内的console.log(增量)记录1、2、3、4、5等,但函数外的console.log(增量)记录0、0、0、0不递增欢迎堆栈溢出。请参加,访问,并阅读如何创建。在这种情况下,一个简单的示例必须解释如何在侦听器外部调用该外部
控制台.log
,但仍然知道确切的调用时间。噢,单击按钮时我如何影响全局变量?据我所知,您正在更改该全局变量。当您调用外部
控制台.log
?@MATKALI时,实际上您正在影响全局变量。单击按钮并运行事件侦听器后,增量变量的值为1。只是最后一个console.log总是在事件侦听器回调之前执行,所以输出为0。我现在编辑代码。我从函数内部删除了console.log。现在它只在函数外部,但只记录0。@MATKALI问题仍然是一样的:您的console.log语句立即执行,而事件侦听器仅在单击按钮后执行。谢谢!现在对我帮助很大!