gpt4 book ai didi

javascript - 在运行时将变量更改为文字?

转载 作者:行者123 更新时间:2023-11-30 23:53:48 26 4
gpt4 key购买 nike

我是 javascript 的初学者,我想不出解决以下问题的方法。我在本例中使用 Mootools,尽管这不是 Mootools 问题:

for (var i = 0; i < 5; i++) {
myElement[i].addEvent('click', function () { otherFunction(i); });
}

每当有人点击 myElement 时,就会调用 otherFunction(好),但传递的值是 5(坏)。我知道这是因为它在循环完成后访问 i (当他们单击元素时),但除了单调之外,我无法考虑任何其他选择

switch(i) {
case 1: myElement[i].addEvent('click', function () { otherFunction(1); }); break;
case 2: myElement[i].addEvent('click', function () { otherFunction(2); }); break;
// ...
}

一定有更好的方法......我觉得我错过了一些明显的东西

更新:向 myElement 添加了 [i] 索引(哎呀)

谢谢,卡梅伦

最佳答案

您的代码是闭包的示例 - 匿名函数引用 i 的最后一个值,因为它有效地保留了外部范围以供以后调用该函数时使用。

这是解决此问题的一种方法:

function getClickHandler(i)
{
return function () { otherFunction(i); }
}

for (var i = 0; i < 5; i++) {
myElement.addEvent('click', getClickHandler(i));
}

这会将闭包的创建移动到另一个作用域,该作用域将“保留”i的每个值

另一种方法是简单地有一个单击处理程序,可以将其分配给每个元素并计算出从事件对象中单击了哪些处理程序(假设您想将这些处理程序附加到不同的元素,尽管您的代码建议您想要多个同一个元素上的处理程序,这有点奇怪:)

关于javascript - 在运行时将变量更改为文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/553672/

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