gpt4 book ai didi

javascript - 在带有 Javascript 闭包的回调函数中,如何访问全局变量

转载 作者:行者123 更新时间:2023-11-28 01:44:50 26 4
gpt4 key购买 nike

很简单:我需要用一个函数注册一个事件属性。但是为了将参数传递给函数,我创建了一个闭包。

var x=0

function foo(bar1,bar2){
return function (){
alert (bar1+bar2);
x++;
}
}

for (var i=0;i<document.getElementsByTagName("div").length;i++) {
document.getElementsByTagName("div")[i].onclick=foo(x,i)
}

因为我有 5 个 div 元素,我认为如果我从上到下点击所有的 div,它应该这样提示:

02468

而是输出:

01234

似乎每次在 foo(x,i) 中,x 都等于 0。如何让 foo() 访问 x 的新值而不是第一次启动?

最佳答案

您仅在内部函数内递增 x。只有单击元素后才会调用此函数。因此,在调用 foo 时,x 始终为 0。它只会在稍后单击某些内容时递增,此时 bar1 的值 已经设置(为 0)。

你可以改为这样做:

var x=0

function foo(bar1){
return function (){
alert (bar1+x);
x++;
}
}

for (var i=0;i<document.getElementsByTagName("div").length;i++) {
document.getElementsByTagName("div")[i].onclick=foo(i)
}

通过这种方式,您将始终使用 x当前值,而不是调用 foo 时的值。

关于javascript - 在带有 Javascript 闭包的回调函数中,如何访问全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23520831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com