Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.07.2012, 17:02
Аватар для Irish.Tippler
Новичок на форуме
Отправить личное сообщение для Irish.Tippler Посмотреть профиль Найти все сообщения от Irish.Tippler
 
Регистрация: 23.07.2012
Сообщений: 9

Глупый вопрос про 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. Почему так? Ведь функция должна отрабатывать один раз? и по каждому нажатию должно делать ++?
Ответить с цитированием
  #2 (permalink)  
Старый 25.07.2012, 17:07
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

скобки после else убери
else {};
Ответить с цитированием
  #3 (permalink)  
Старый 25.07.2012, 17:12
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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>

Последний раз редактировалось Deff, 25.07.2012 в 17:16.
Ответить с цитированием
  #4 (permalink)  
Старый 25.07.2012, 17:13
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

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

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

Удобнее через 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;
  }
}
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #5 (permalink)  
Старый 25.07.2012, 17:24
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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


var counter = 0;

function show_counter () {alert(counter)}; 

function plus_counter () {

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

};
plus_counter ()

Последний раз редактировалось Deff, 25.07.2012 в 17:59.
Ответить с цитированием
  #6 (permalink)  
Старый 25.07.2012, 18:27
Аватар для Irish.Tippler
Новичок на форуме
Отправить личное сообщение для Irish.Tippler Посмотреть профиль Найти все сообщения от Irish.Tippler
 
Регистрация: 23.07.2012
Сообщений: 9

Большое спасибо!
Напомните пожалуйста, что будет работать быстрее, case или if? Где-то тут видел ответ на это, но раз уж такое дело )))
Ответить с цитированием
  #7 (permalink)  
Старый 25.07.2012, 18:47
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Irish.Tippler,
Последний Вариант - не подходит? (Чисто интересно
Ответить с цитированием
  #8 (permalink)  
Старый 25.07.2012, 19:19
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

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

Но вариант от Deff более удобный (к примеру если надо будет считать не до 3 а до 10 скажем, то не придется строить небоскребы для switch)
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #9 (permalink)  
Старый 25.07.2012, 19:35
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

var counter = 0;

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



правда совсем не универсальный, насколько может быть)
Ответить с цитированием
  #10 (permalink)  
Старый 26.07.2012, 12:32
Аватар для Irish.Tippler
Новичок на форуме
Отправить личное сообщение для Irish.Tippler Посмотреть профиль Найти все сообщения от Irish.Tippler
 
Регистрация: 23.07.2012
Сообщений: 9

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про сравнения san4es Javascript под браузер 4 01.04.2012 16:56
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Глупый вопрос про iPhone/iPad/Android/Blackberry mycoding Оффтопик 5 01.01.2011 08:59
Вопрос про ООП, цепочки прототипов. Shaci Общие вопросы Javascript 5 27.01.2010 14:50
Вопрос про отправку данных методом Post QQQ AJAX и COMET 1 15.07.2009 23:27