#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) 12. @patrick_dw Я поддался искушению. Но я решил сделать это правильно. Кроме того, если я покажу ему решение eval, он скажет: «так проще / приятнее, я просто воспользуюсь этим. Что значит eval — это плохо? оценка в порядке!»
3. @Raynos: Я видел точную ситуацию ранее в этом году, но кто-то предлагал решение с использованием
with
. Оператору потребовалось всего несколько минут, чтобы взломать его код, но он был убежден , чтоwith
это в любом случае было решением.4. Что ж, это работает, но я действительно не понимаю, что происходит: S,
return number === undefined || number < 10;
зачем мне нужнаnumber === undefined
часть отсюда?5. @CIRK первый вызов — это
undefined
. Вы можете инициализироватьresult = 0
, если хотите. Но тогда по умолчанию значение равно 0 вместоundefined
и не будет хорошо работать со строками или массивами. Я могу представить, что это выглядит чужеродно, если вы не привыкли передавать функции первого класса подобным образом.