Javascript: переменная как условие While

#javascript #variables #while-loop #conditional-statements

#javascript #переменные #цикл while #условные операторы

Вопрос:

Я хотел бы указать условие while в качестве переменной, что-то вроде:

 function doWhile(condition){
    while(condition){
       number  ;
    }
    alert(number);
}

var number = 1;
doWhile(number < 10);
  

Ответ №1:

Единственный способ сделать это — использовать функции.

 function doWhile(condition, action, undefined) {
    var current = undefined;
    // call your condition with the current value
    while(condition(current)) {
        // do something with the current value then update it
        current = action(current);
    }
    return resu<
}

var number = doWhile(function condition(number) {
    // if the current value has no value yet continue
    // if the current value is less than 10
    return number === undefined || number < 10;
}, function action(number) {
    // if the number has no value set it to 0
    if (number === undefined) {
         number = 0;
    }
    // increase it
    return   number;
});
console.log(number);
  

Комментарии:

1. Что, ты не хочешь запускаться eval() в цикле? ;o) 1

2. @patrick_dw Я поддался искушению. Но я решил сделать это правильно. Кроме того, если я покажу ему решение eval, он скажет: «так проще / приятнее, я просто воспользуюсь этим. Что значит eval — это плохо? оценка в порядке!»

3. @Raynos: Я видел точную ситуацию ранее в этом году, но кто-то предлагал решение с использованием with . Оператору потребовалось всего несколько минут, чтобы взломать его код, но он был убежден , что with это в любом случае было решением.

4. Что ж, это работает, но я действительно не понимаю, что происходит: S, return number === undefined || number < 10; зачем мне нужна number === undefined часть отсюда?

5. @CIRK первый вызов — это undefined . Вы можете инициализировать result = 0 , если хотите. Но тогда по умолчанию значение равно 0 вместо undefined и не будет хорошо работать со строками или массивами. Я могу представить, что это выглядит чужеродно, если вы не привыкли передавать функции первого класса подобным образом.