Показать сообщение отдельно
  #8 (permalink)  
Старый 08.05.2008, 17:41
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

провоментирую я наверно, если никто не возражает
function t(elem, str) {
  for (var i = 0; i < str.length; i++)//цикл. перебирае последовательно все буквы переменной str
    setTimeout(function(char) { return function() { elem.innerHTML += char; } }(str.charAt(i)), i * 1000);//вешает на setTimeout динамически сгенерированную функцию, через i*1000 милисекунд
}
t(document.getElementById(qwezxc), 'Hello, World')//данный вызов функции может быть где угодно. например по нажатию кнопки, либо в составе какой-нибудь другой функции

теперь по поводу первого параметра setTimeout:
он создает анонимную функцию, которая делает
return function() { elem.innerHTML += char; } 
//возвращаем еще одну анонимную функцию, которая занимается добавлением буквы на страницу, внутрь элемента elem

после этого первая анонимная функция запускается на выполнение с помощью (str.charAt(i)), и возвращает в setTimeout ссылку на вторую анонимную функцию.
//первым параметром функции setTimeout должна быть функция, не
//принимающая параметров. Если мы вместо этого передаем строку кода,
//то он автоматически преобразуется в функцию
//таким образом следующие три конструкции идентичны
setTimeout("alert('Hello, World');",1000);
//
function func()
{alert('Hello, World');}
setTimeout(func,1000);
//
func=function()//альтернативный способ создания функции
{alert('Hello, World');}
setTimeout(func,1000);

Также советую почитать эту статью
http://javascript.ru/tutorial/basic/functions
Ответить с цитированием