Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Не могу найти ошибку в коде (https://javascript.ru/forum/jquery/16387-ne-mogu-najjti-oshibku-v-kode.html)

pro_xaoc 06.04.2011 09:04

Не могу найти ошибку в коде
 
Приветствую всех! Помогите найти ошибку в коде:
$(function(){
var i=5;
do{	
	setTimeout('$("#div").html(i)',1000);
	i--;
	}while(i>=0);
})

Firebag выдает ошибку, что переменная i не определена. Заранее спасибо!

Kolyaj 06.04.2011 09:23

http://alljs.ru/articles/timeout/overview.html
3-й абзац.


Цитата:

Сообщение от pro_xaoc
Firebag

Огненная сумка?

рони 06.04.2011 09:34

Цитата:

Сообщение от pro_xaoc
setTimeout('$("#div").html(i)',1000);

Строка '$("#div").html(i)' строка будет выполнена в глобальной области видимости;
а переменная i локальная, лучше использовать анонимную функцию а не строку
setTimeout(function () { $("#div").html(i);},1000);
но и так скрипт нормально не заработает ... но ошибок не будет
Рабочий вариант
$(function(){
var i=5;
function foo() {
 $("#div").html(i);
 i-- && setTimeout(function (){foo()},1000);
    };
foo();
})

pro_xaoc 06.04.2011 10:07

рони,
спасибо, работает. Но я не могу понять смысла этого скрипта, вроде цикла нет, но работает так, как будто стоит цикл. Можете объяснить, если не трудно? Спасибо.

рони 06.04.2011 10:25

pro_xaoc,

Цитата:

Сообщение от рони
i-- && setTimeout(function (){foo()},1000);

может так понятнее будет
Функция сама решает надо ли ей запуститься ещё раз
i--;
if(i>0)setTimeout(function (){foo()},1000);

Пока условие выполняеться i ,больше нуля запускать таймер, который запустит функцию.

pro_xaoc 06.04.2011 10:29

рони,
низкий вам поклон! спасибо!


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