@Sulin

Функция setTimeout не видит вызываемую функцию, в чем ошибка?

Здравствуйте.
Подскажите пожалуйста почему код
setTimeout( ' unLockForm($(form)); ', 1000 );
не видит функцию unLockForm() (точка с запятой роли не играет, без кавычек синтаксическая ошибка) и выдаёт ошибку 'Uncaught ReferenceError: unLockForm is not defined'

а код
setTimeout( function() { unLockForm($(form)); }, 1000);

отрабатывает верно.

Почему без анонимной функции не работает?
  • Вопрос задан
  • 768 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Вот несколько примеров запуска функции через setTimeout:
  1. Будет работать только если вы свою функцию записали прямо в window. Это очень, очень, очень плохой вариант, не используйте его. Передавать строку в качестве первого аргумента - плохая практика, это грозит самыми разнообразными последствиями, начиная от выполнения небезопасного кода и заканчивая проблемами с областью видимости (что и произошло у вас). Подробнее.
  2. Удобен, когда функция не ожидает никаких аргументов - можно в setTimeout передать непосредственно объект функции.
  3. Позволяет передать в setTimeout объект функции, и при этом передать в функцию аргументы, не создавая промежуточную анонимную функцию, при помощи метода bind. Не будет работать в старых браузерах.
  4. Если функции требуются аргументы, можно вызвать ее и таким способом, через анонимную функцию. Этот вариант считается самым предпочтительным.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы