Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.11.2013, 23:07
Аспирант
Отправить личное сообщение для Altai Посмотреть профиль Найти все сообщения от Altai
 
Регистрация: 23.11.2013
Сообщений: 37

Как break-нуть функцию с рекурсией? (я новичек)
Задача - принять число, и потом поменять фон число раз, равное этому числу.
Менять фон бесконечное число раз - получается. Но если ввести эту строку: if (Number(i)==Number(x)) break; - то функция вообще не запускается. В чём причина, и как можно выполнить данное условие?

i=0;
function func1(){
	
	x=Number(document.form1.inp1.value);
	
	
		if(document.bgColor=="yellow") document.bgColor="white";
		else document.bgColor="yellow";
		setTimeout(func1, 2000);
		i++;
	
	if (Number(i)==Number(x)) break;
}
Ответить с цитированием
  #2 (permalink)  
Старый 24.11.2013, 03:00
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 2,932

А какой смысл брейкать ф-цию, если она после строки с брейком все равно ничего не будет выполнять дальше?

Изпользуйте return.
Ответить с цитированием
  #3 (permalink)  
Старый 24.11.2013, 08:19
Аспирант
Отправить личное сообщение для Altai Посмотреть профиль Найти все сообщения от Altai
 
Регистрация: 23.11.2013
Сообщений: 37

Сообщение от Ruslan_xDD Посмотреть сообщение
А какой смысл брейкать ф-цию, если она после строки с брейком все равно ничего не будет выполнять дальше?

Изпользуйте return.
как именно в данном случае поможет return? И почему после строки с break функция ничего не будет выполнять? Там же условие, чтобы выполнился break только после того, как i == x а мне это как раз и надо. Почему тогда break вообще не даёт функции работать?
Ответить с цитированием
  #4 (permalink)  
Старый 24.11.2013, 08:39
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,600

Сообщение от Altai Посмотреть сообщение
Почему тогда break вообще не даёт функции работать?
Потому что break используется внутри цикла или switch, if к таковым не относится.
Ответить с цитированием
  #5 (permalink)  
Старый 24.11.2013, 09:12
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 2,932

Если я правильно понял, то Вам нужно это:

var i = 0, timeout;

function func1(){
	
	x = Number(document.form1.inp1.value);
	
	
		if(document.bgColor=="yellow") document.bgColor="white";
		else document.bgColor="yellow";
		timeout = setTimeout(func1, 2000);
		i++;
	
	if (Number(i)==Number(x)) clearTimeout(timeout);
}


Упрощённый вариант:

var i = 0, timeout;

function func1() {
	document.bgColor = document.bgColor == 'yellow' ? '#000' : 'yellow';
	timeout = setTimeout(func1, 2000);
	if (++i == document.form1.inp1.value) clearTimeout(timeout);
}


Правильный вариант:
function func1() {
	var i = 0, int, m, n = document.form1.inp1;
	int = setInterval(function() {
		document.body.bgColor = (m ^= 1) ? 'yellow' : '#000';
		if(++i == n.value) clearInterval(int);
	}, 2000);
}

Последний раз редактировалось ruslan_mart, 24.11.2013 в 09:25.
Ответить с цитированием
  #6 (permalink)  
Старый 24.11.2013, 09:32
Аспирант
Отправить личное сообщение для Altai Посмотреть профиль Найти все сообщения от Altai
 
Регистрация: 23.11.2013
Сообщений: 37

Сообщение от Ruslan_xDD Посмотреть сообщение
Если я правильно понял, то Вам нужно это:

var i = 0, timeout;

function func1(){
	
	x = Number(document.form1.inp1.value);
	
	
		if(document.bgColor=="yellow") document.bgColor="white";
		else document.bgColor="yellow";
		timeout = setTimeout(func1, 2000);
		i++;
	
	if (Number(i)==Number(x)) clearTimeout(timeout);
}


Упрощённый вариант:

var i = 0, timeout;

function func1() {
	document.bgColor = document.bgColor == 'yellow' ? '#000' : 'yellow';
	timeout = setTimeout(func1, 2000);
	if (++i == document.form1.inp1.value) clearTimeout(timeout);
}


Правильный вариант:
function func1() {
	var i = 0, int, m, n = document.form1.inp1;
	int = setInterval(function() {
		document.body.bgColor = (m ^= 1) ? 'yellow' : '#000';
		if(++i == n.value) clearInterval(int);
	}, 2000);
}
Спасибо большое! Всё работает. Мне непонятно было, почему break не завершает функцию. Теперь понял что break может только циклы завершать. А в место break для завершения функции надо использовать return. Спасибо всем за помощь!
Ответить с цитированием
  #7 (permalink)  
Старый 24.11.2013, 09:36
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,600

C return как заказывали
function func1(i){
	i = i || 0;
	document.bgColor = (document.bgColor == 'yellow') ? 'white' : 'yellow';
	if (++i == +document.form1.inp1.value) return;
	setTimeout(func1, 2000, i);
}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Flot Как передать переменную в функцию отрисовки точки на графике Ren jQuery 0 20.06.2012 13:16
как запустить функцию после другой функции Rentony jQuery 7 07.02.2012 16:01
Как передать переменную в функцию с помощью JQuery??? Иван Я Events/DOM/Window 3 20.01.2012 09:21
Как вызвать функцию из другого файла Mukhtar AJAX и COMET 4 07.10.2011 21:01
Как передать элемент в функцию после createElement Oleg NT Общие вопросы Javascript 3 23.06.2008 01:11