Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как break-нуть функцию с рекурсией? (я новичек) (https://javascript.ru/forum/misc/43141-kak-break-nut-funkciyu-s-rekursiejj-ya-novichek.html)

Altai 24.11.2013 01:07

Как 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;
}

ruslan_mart 24.11.2013 05:00

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

Изпользуйте return.

Altai 24.11.2013 10:19

Цитата:

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

Изпользуйте return.

как именно в данном случае поможет return? И почему после строки с break функция ничего не будет выполнять? Там же условие, чтобы выполнился break только после того, как i == x а мне это как раз и надо. Почему тогда break вообще не даёт функции работать?

ruslan_mart 24.11.2013 11:12

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

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);
}

Altai 24.11.2013 11:32

Цитата:

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

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. Спасибо всем за помощь!


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