Хотя другие уже рассмотрели эту тему выше, и для window.setTimeout(), и для window.setInterval() требуются функции references. Вместо этого ваш код предоставляет возвращаемое значение из вызова функции.
Когда вы хотите вызвать или активировать функцию JavaScript, вы, как и ожидалось, пишете:
ВыполнитьМоюфункцию();
Механизм JavaScript выполнит эту функцию при обнаружении этой строки.
Однако для setTimeout() и setInterval() требуется ссылка на объект функции, соответствующий вашей функции. Которые вы получаете с помощью следующих и подобных средств:
мояФункция = ВыполнениеМоейФункции;
Эта строка копирует ссылку на объект функции, соответствующий DoMyFunction(), в новую переменную. Который вы затем можете передать в setInterval() и setTimeout(), а именно:
отбросить = window.setTimeout (myFunc, 1000);
Эта строка выше заставит движок JavaScript выполнить вашу предполагаемую функцию (а именно DoMyFunction()) один раз, по истечении 1 секунды, и:
отбросить = window.setInterval (myFunc, 1000);
заставит движок JavaScript выполнять вашу предполагаемую функцию повторно, раз в секунду.
Конечно, вы могли бы добиться того же эффекта, не используя новую переменную, просто следующим образом:
discard = window.setTimeout(DoMyFunction, 1000);
и т.п.
Если, однако, вы совершите ошибку, используя:
discard = window.setTimeout(DoMyFunction(), 1000);
вместо этого происходит то, что выполняется DoMyFunction(), и любой возвращаемый параметр, возникающий из этого, затем передается функции window.setTimeout(). Поскольку window.setTimeout() ожидает, что здесь будет передана ссылка на объект функции, и вместо этого получает все, что возвращает ваша функция (или undefined, если ваша функция ничего не возвращает), то внутренняя проверка, выполняемая setTimeout() (и setInterval()) покажет, что здесь не получена ссылка на объект функции, и просто молча прервется.
Гораздо более коварная ошибка, конечно, может возникнуть, если DoMyFunction() действительно действительно возвращает допустимый объект функции! Если вы написали DoMyFunction() для этого, то этот объект функции будет передан в setTimeout() вместо этого, и будет запущена эта функция! Конечно, вы можете использовать это намеренно и написать свою функцию DoMyFunction() как замыкание, возвращающую реальную функцию, которую вы хотите, чтобы setTimeout() выполняла в качестве возвращаемого параметра функционального объекта, и если вы используете >этот подход, то форма:
discard = window.setTimeout(DoMyFunction(), 1000);
больше не будет ошибкой.
Помните, что каждая функция JavaScript, которую вы пишете в своем коде, при синтаксическом анализе этого кода связывается с объектом функции механизмом JavaScript. Для выполнения функции используйте:
ВыполнитьМоюФункция();
Вместо этого, чтобы сослаться на объект функции, используйте:
DoMyFunction;
Те () могут иметь огромное значение в зависимости от контекста, поскольку JavaScript использует этот подход к различению между ссылкой на объект функции и выполнением функции. инструкция.
person
David Edwards
schedule
28.04.2018
setTimout
иsetInterval
довольно распространены. - person Ivan   schedule 04.01.2012