Глупый вопрос про 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, время: 13:08. |