gpt4 book ai didi

javascript - 我可以将 "new"匿名函数传递给 addEventListener

转载 作者:行者123 更新时间:2023-11-30 07:46:58 24 4
gpt4 key购买 nike

我使用这样的代码将参数传递给事件处理函数。但是,在这种特殊情况下,循环会导致问题。在所有 activeVisual 调用中,只有最后一个 linkTags[i] 是可访问的。这与这样一个事实有关,即传递参数的匿名函数在整个循环中都是一样的。

  for (var i = 0; i < linkTags.length; i++) {
addCrossEvent(linkTags[i], "click", launchLink);
addCrossEvent(linkTags[i], "mousedown",
function(evt) {
activeVisual(evt, linkTags[i]);
});
}

现在,我记得像这样在匿名函数声明之前尝试添加新的:

  for (var i = 0; i < linkTags.length; i++) {
addCrossEvent(linkTags[i], "click", launchLink);
addCrossEvent(linkTags[i], "mousedown",
new function(evt) {
activeVisual(evt, linkTags[i]);
});
}

它没有用。 activeVisual 永远不会被调用。有人可以向我解释为什么以及如何让它发挥作用吗?

更新最终解决方案

感谢下面的所有回复,我的工作代码现在看起来像这样:

  // Function that provides pass of event handling parameters with separate copy in each loop
function callbackHandler(index) {
return function(evt) {
activeVisual(evt, linkTags[index]);
}
}
...
for (var i = 0; i < linkTags.length; i++) {
...
addCrossEvent(linkTags[i], "mousedown", callbackHandler(i));
}

最佳答案

你需要这样做:

addCrossEvent(linkTags[i], "mousedown", 
(function(i) {
return function(evt) {
activeVisual(evt, linkTags[i]);
}
)(i);
);

问题出在迭代器变量 i 上,它在每次迭代时都会发生变化,并且传递给它的引用,i 的值不会被复制。以这种方式将其作为参数传递给包装函数,将产生一个副本,并将在该特定迭代中接收实际值。

关于javascript - 我可以将 "new"匿名函数传递给 addEventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4412479/

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