Javascript 更改eventListener调用的函数内的变量无效

Javascript 更改eventListener调用的函数内的变量无效,javascript,Javascript,我试图做一个无聊的“游戏”,我遇到了这个问题。我想用一个事件侦听器调用一个函数,它接受一个变量并添加1(运行时): 我检查了改变函数内部变量的方法是通过返回函数;然而,这在这里不起作用,因为我不能回到一个事件监听器。请帮助您可以获取另一个变量y并存储+1值。单击后即可访问该文件 vary=0; 常量添加=(x)=>{ y=1+y; } var foo=document.getElementById(“foo”); addEventListener(“单击”,函数(){add();console

我试图做一个无聊的“游戏”,我遇到了这个问题。我想用一个事件侦听器调用一个函数,它接受一个变量并添加1(运行时):


我检查了改变函数内部变量的方法是通过返回函数;然而,这在这里不起作用,因为我不能回到一个事件监听器。请帮助

您可以获取另一个变量y并存储+1值。单击后即可访问该文件

vary=0;
常量添加=(x)=>{
y=1+y;
}
var foo=document.getElementById(“foo”);
addEventListener(“单击”,函数(){add();console.log(y)})

单击我
解决方案,仍然使用一个值(一个数字)作为函数的参数

//函数可以返回如下结果:
常量添加=(x)=>{
返回x+1;
}
var x=5;
var foo=document.getElementById(“foo”);
//调用方应根据函数的结果更新“x”:
addEventListener(“单击”,函数(){
x=加(x);
console.log(“单击后的x为:”,x);
});   
log(“原始的x是:”,x)

单击我(带有数字(值)的函数)
Javascript
中,除了通过引用的
值传递的
对象之外,所有基元类型(
数字
字符串
等…)都是通过值传递的。这是一个很好的解释。所以你不能做我认为你想做的事情,我假设你想通过
C-like引用传递变量。但是,您可以(不推荐)使用全局
窗口
对象以其名称访问全局变量

var x=0;
常量添加=(x)=>{
窗口[x]=窗口[x]+1;
}
document.getElementById(“测试”).addEventListener(“单击”,函数)()
{
添加(“x”);
log(“x现在是:+x”);
})

单击我
在JavaScript中无法执行此操作。通过传递一个对象并让被调用的函数修改对象上的属性,可以安排执行类似的操作。
var
是一个保留关键字。尝试使用其他工具,例如
apples
。这与事件侦听器无关。如果你在其他地方调用它,它也不会起作用。在运行代码段时,这两种解决方案对我都不起作用。(它们总是记录6,甚至在单击之后,这似乎表明
y
ovject没有更新)。请参阅我的答案,以防止使用另一个全局变量,或使用过时的回调(至少在表单中)。您得到的是6,因为代码段超过了5,当然回调永远不会过时。它们以promise、async的形式得到了改进。它们总是记录6,甚至在单击之后,这似乎表明
y
global对象没有更新,我认为这就是OP所要寻找的。回调已经过时了,至少在每个问题的形式上,他希望传递var函数(){add(var)}),并将其增加1,所以我写了这个。在全局范围内定义y可以解决我的答案更新后的问题。
const add = (x) =>{
    x = x + 1
}
foo.addEventListener("click", function(){add(var)})