无论如何,我是否可以将变量设置为数字范围并将其包含在函数中? (javascript)

问题描述 投票:0回答:2
onEvent("pb" + 1, "click", function() {
console.log(("pb" + 1) + " was clicked!");
});

onEvent("pb" + 2, "click", function() {
console.log(("pb" + 2) + " was clicked!");
});

onEvent("pb" + 3, "click", function() {
console.log(("pb" + 3) + " was clicked!");
});

onEvent("pb" + 4, "click", function() {
console.log(("pb" + 4) + " was clicked!");
});

我必须编写80个这些函数...

我想这样做,所以我可以使用变量来包含范围1-80:

 onEvent("pb" + [1, 80], "click", function() {
 console.log(("pb" + [1, 80]) + " was clicked!");
 });

我不确定是否可以将变量定义为一组单独的数字。

javascript range dry
2个回答
1
投票

使用循环:

for (let i = 1; i <= 80; i++) {
    onEvent("pb" + i, "click", function()
        console.log("pb" + i + " was clicked");
    })
}

请确保您使用let而不是var,以便为每次迭代获得新的绑定。否则,您会遇到Javascript infamous Loop issue?


0
投票

不幸的是,范围迭代器尚未内置。但是它们足够简单(使用循环):

function* range(start, end) {
    for (let i = start; i <= end; i++) {
        yield i
    }
}

然后让您执行此操作:

for (let value of range(1,80)){
  console.log(value)
}

或此:

range(1,80).forEach(value => console.log(value))

为什么这样做而不是仅仅循环?好吧,取决于,有时循环更有意义。但是有一些原因可能会更好:

  • 更多意图揭示代码:具有一个名为range的函数会告诉您您打算做什么:使用一定范围的值
  • 更好的提取:说您以后会发现循环效率低下(不太可能,但出于示例目的)。然后,您可以在one位置更改range代码,并将其固定在任何地方。或者,也许您想处理字母和数字的范围。现在,您可以在一个地方进行更改,并且可以在任何地方使用。
  • 类似地,说您需要在许多地方使用范围。在各处使用循环意味着您必须避免在每个使用该循环的地方输入错字。如果改为使用range,则可以避免该问题。
© www.soinside.com 2019 - 2024. All rights reserved.