Могу ли я в любом случае установить переменную как диапазон чисел и включить ее в функцию? (javascript) - PullRequest
0 голосов
/ 17 апреля 2020
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!");
 });

Я не уверен, возможно ли определить переменную как набор отдельных чисел.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

use al oop:

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

Убедитесь, что вы используете let вместо var, чтобы вы получали новую привязку для каждой итерации. В противном случае вы столкнетесь с проблемой Javascript печально известной L oop?

0 голосов
/ 17 апреля 2020

К сожалению, итераторы диапазона еще не встроены. Но их достаточно просто сделать (используя al oop):

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))

Почему это вместо просто oop? Ну, зависит, иногда все oop имеет больше смысла. Но вот несколько причин, почему это может быть лучше:

  • больше намерений, раскрывающих код: наличие функции с именем range говорит вам, что вы собираетесь делать: работать с диапазоном значений
  • Лучшее извлечение: скажем, позже вы обнаружите, что циклы неэффективны (маловероятно, но ради примера). Затем вы можете изменить range код в одном месте и исправить его везде. Или, может быть, вы хотите обрабатывать создание диапазонов букв и цифр. Теперь вы можете внести изменения в одном месте, и оно работает везде.
  • Аналогично, скажем, вам нужно использовать диапазоны во многих местах. Использование al oop везде означает, что вы должны избегать опечаток в каждом месте, где вы используете l oop. Если вместо этого вы используете range, вы можете избежать этой проблемы.
...