2016-01-03 2 views
1
statusDefault = status.textContent, 

setStatus = function(s){ 
    status.textContent = s;//to set any status 

    if(s != statusDefault){ 
     var delay = setTimeout(function(){ 
      setStatus(statusDefault); 
      clearInterval(delay); 
     },3000); 
    } 
}; 

setStatus('Testing..'); 

В приведенном выше коде я не получаю, как это работает. Статус по умолчанию изменяется на «Тестирование ..», и через 3 секунды он снова показывает значение по умолчанию. Я смущен.Путаница обратного вызова в JavaScript, Node.js

Как это работает?

ответ

1
statusDefault = status.textContent, 

Скопируйте содержимое перед его изменением, скопировав его внутри JavaScript. Это содержимое по умолчанию.

setStatus = function(s){ 
    status.textContent = s; 

Когда функция побежал, устанавливается независимо от первого аргумента в status «s textContent. Проще говоря, он просто меняет содержимое элемента, когда функция запускается.

if(s != statusDefault){ 

Убедитесь, что значение по умолчанию не было введено первым.

var delay = setTimeout(function(){ 
    setStatus(statusDefault); 
    clearInterval(delay); 
}, 3000); 

Создать тайм-аут, который длится 3000 миллисекунд (3 секунды), через 3 секунды он называет себя внутренне снова setStatus(statusDefault), это сбросит содержимое к тому, что он был первоначально (из-за statusDefault), и он будет также сделать предыдущий оператор if ложным, поэтому он не создает другой тайм-аут.

Вот более кратким (и, вероятно, легче понять) список:

  1. Исходное содержание копируется в statusDefault.
  2. Содержимое предназначено для печати 'Testing..'.
  3. 'Testing..' не соответствует оригинальному содержимому.
  4. Создайте тайм-аут, который длится 3 секунды (создание 3-секундной задержки).
  5. Функция снова вызывает себя снова, минуя statusDefault.
  6. Содержимое содержит statusDefault.
  7. Если утверждение неверно. Больше задач, JavaScript не выполняется.
Смежные вопросы