Roman Prokofyev

Chief Scientist at FAIRTIQ. I work on making public transport accessible for everyone.

Javascript setTimeout bug

24 Jun 2011 » sciencewise, bug

Сегодня почти целый день провозился со странным багом (фичей?) Javascript, допущенным, как обычно, по незнанию. Суть такова: в Javascript существует функция setTimeout, позволяющая отложенно запускать функцию (по истечении определённого времени).

Этой функции можно передать аргумент, задающий функцию, двумя различными способами:

  1. setTimeout(“function()”, 1000);
  2. setTimeout(function, 1000);

В певом случае мы передаем строковый литерал, содержащий значение функции, а во втором - ссылку на саму функцию. Но на самом деле в первом случае немедленно происходит вычисление результата выполнения передаваемой функции, и производится оно только 1 РАЗ (!), после первого раза функция больше НИКОГДА не вызывается до следующей перезагрузки страницы.