Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.11.2013, 01:07
Аспирант
Отправить личное сообщение для Altai Посмотреть профиль Найти все сообщения от Altai
 
Регистрация: 24.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, 05:00
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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

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

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

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

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

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 в 11:25.
Ответить с цитированием
  #5 (permalink)  
Старый 24.11.2013, 11:32
Аспирант
Отправить личное сообщение для Altai Посмотреть профиль Найти все сообщения от Altai
 
Регистрация: 24.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. Спасибо всем за помощь!
Ответить с цитированием
Ответ



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

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


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