Глупый вопрос про if then.
Помогите пожалуйста, чую, что вопрос глупый, но я уже не знаю. Бывает, сидишь, тупишь, а дело в одной скобке )
Так вот. Есть кнопка. Есть глобальная переменная. Есть функция при нажатии:
var counter = 0;
function show_counter () {console.log(counter)};
function plus_counter () { if (counter===0) {counter++;show_counter();} else {};
if (counter===1) {counter++;show_counter();} else {};
if (counter===2) {counter=0;show_counter();} else {};
};
в лог выдаёт, за одно нажатие: 1 2 0. Почему так? Ведь функция должна отрабатывать один раз? и по каждому нажатию должно делать ++? |
скобки после else убери
else {}; |
Irish.Tippler,
Либо сменить последовательность проверок(от старшего к младшему, либо тупо ставить return, посколь после проверки и инкремента counter подпадает под следующую проверку, с выводом true
<script type="text/javascript">
var counter = 0;
function show_counter () {alert(counter)};
function plus_counter () {
if (counter===2) {counter=0;show_counter();} else {};
if (counter===1) {counter++;show_counter();} else {};
if (counter===0) {counter++;show_counter();} else {};
};
plus_counter ()
</script>
<script type="text/javascript">
var counter = 0;
function show_counter () {alert(counter)};
function plus_counter () {
if (counter===0) {counter++;show_counter();return;} else {};
if (counter===1) {counter++;show_counter();return;} else {};
if (counter===2) {counter=0;show_counter();return;} else {};
};
plus_counter ()
</script>
|
Не правильный порядок условий.
Вы добавляете единицу к переменной, и, из за этого срабатывает следующее условие. Удобнее через switch сделать:
var counter = 0;
function show_counter () {console.log(counter)};
function plus_counter () {
switch(counter) {
case 0:
counter++;show_counter();break;
case 1:
counter++;show_counter();break;
case 2:
counter=0;show_counter();break;
}
}
|
Irish.Tippler,
Есть такой ход для троичной проверки
var counter = 0;
function show_counter () {alert(counter)};
function plus_counter () {
counter = (counter+1)%3;
show_counter ();
};
plus_counter ()
|
Большое спасибо!
Напомните пожалуйста, что будет работать быстрее, case или if? Где-то тут видел ответ на это, но раз уж такое дело ))) |
Irish.Tippler,
:) Последний Вариант - не подходит? (Чисто интересно |
Цитата:
Но вариант от Deff более удобный (к примеру если надо будет считать не до 3 а до 10 скажем, то не придется строить небоскребы для switch) |
var counter = 0;
function show_counter () { console.log(counter) };
function plus_counter () { counter == 2 ? counter = 0 : counter++; show_counter(); };
правда совсем не универсальный, насколько может быть) |
Отлично подошёл модифицированный вариант с case.
|
| Часовой пояс GMT +3, время: 07:56. |