Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Глупый вопрос про if then. (https://javascript.ru/forum/misc/30147-glupyjj-vopros-pro-if-then.html)

Irish.Tippler 25.07.2012 17:02

Глупый вопрос про 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. Почему так? Ведь функция должна отрабатывать один раз? и по каждому нажатию должно делать ++?

vadim5june 25.07.2012 17:07

скобки после else убери
else {};

Deff 25.07.2012 17:12

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>

walik 25.07.2012 17:13

Не правильный порядок условий.

Вы добавляете единицу к переменной, и, из за этого срабатывает следующее условие.

Удобнее через 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;
  }
}

Deff 25.07.2012 17:24

Irish.Tippler,
Есть такой ход для троичной проверки


var counter = 0;

function show_counter () {alert(counter)}; 

function plus_counter () {

   counter = (counter+1)%3;
   show_counter ();

};
plus_counter ()

Irish.Tippler 25.07.2012 18:27

Большое спасибо!
Напомните пожалуйста, что будет работать быстрее, case или if? Где-то тут видел ответ на это, но раз уж такое дело )))

Deff 25.07.2012 18:47

Irish.Tippler,
:) Последний Вариант - не подходит? (Чисто интересно

walik 25.07.2012 19:19

Цитата:

Сообщение от Deff
что будет работать быстрее

Если не ошибаюсь то вариант с switch который я предложил и вариант с if от Deff, будут работать одинаково.

Но вариант от Deff более удобный (к примеру если надо будет считать не до 3 а до 10 скажем, то не придется строить небоскребы для switch)

tadjik1 25.07.2012 19:35

var counter = 0;

function show_counter () { console.log(counter) };
function plus_counter () { counter == 2 ? counter = 0 : counter++; show_counter(); };



правда совсем не универсальный, насколько может быть)

Irish.Tippler 26.07.2012 12:32

Отлично подошёл модифицированный вариант с case.


Часовой пояс GMT +3, время: 13:08.