Я изучаю JavaScript и недавно узнал о событиях JavaScript. Когда я узнал об этом setTimeout
в W3Schools , я заметил странную фигуру, с которой раньше не сталкивался. Они используют двойные кавычки и затем вызывают функцию.
Пример:
setTimeout("alertMsg()", 3000);
Я знаю, что двойные и одинарные кавычки в JavaScript означают строку.
Также я увидел, что могу сделать то же самое так:
setTimeout(alertMsg, 3000);
С круглыми скобками он ссылается, без скобок он копируется. Когда я использую цитаты и скобки, это становится сумасшедшим.
Я буду рад, если кто-нибудь сможет объяснить мне разницу между этими тремя способами использования setTimeout
:
С круглыми скобками:
setTimeout("alertMsg()", 3000);
Без кавычек и скобок:
setTimeout(alertMsg, 3000);
И третий использует только кавычки:
setTimeout("alertMsg", 3000);
Примечание: лучшим источником для setTimeout
справки будет MDN .
javascript
settimeout
user1316123
источник
источник
mysql_
расширение PHP), для которых поток вопросов SO является лишь примером. В IIRC были и очень тонкие ошибки в разделе SQL, но с момента моего последнего посещения веб-сайта прошел почти год, и многие из них также можно исправить. И даже если бы все вышеперечисленное было идеально, я бы все равно не продвигал сайт, который пытается обмануть людей с помощью мошенничества с их сертификатами.Ответы:
Используя
setInterval
илиsetTimeout
Вы должны передать ссылку на функцию в качестве первого аргумента для
setTimeout
илиsetInterval
. Эта ссылка может быть в форме:Анонимная функция
Имя существующей функции
Переменная, которая указывает на существующую функцию
Обратите внимание, что я установил «переменную в функции» отдельно от «имени функции». Не очевидно, что имена переменных и функций занимают одно и то же пространство имен и могут заглушить друг друга.
Передача аргументов
Чтобы вызвать функцию и передать параметры, вы можете вызвать функцию внутри обратного вызова, назначенного таймеру:
Есть еще один метод для передачи аргументов в обработчик, однако он не совместим с разными браузерами .
Контекст обратного вызова
По умолчанию контекст обратного вызова (значение
this
внутри функции, вызываемой таймером) при выполнении является глобальным объектомwindow
. Если вы хотите изменить это, используйтеbind
.Безопасность
Хотя это возможно, вы не должны передавать строку в
setTimeout
илиsetInterval
. Передача строки создаетsetTimeout()
илиsetInterval()
использует функциональность, аналогичнуюeval()
той, которая выполняет строки как сценарии , делая возможным произвольное и потенциально опасное выполнение сценариев.источник
я думаю, что функция setTimeout, которую вы пишете, не запускается. если вы используете jquery, вы можете заставить его работать правильно, выполнив это:
источник
Полностью согласен с Иосифом.
Вот скрипка, чтобы проверить это: http://jsfiddle.net/nicocube/63s2s/
В контексте скрипта строковый аргумент не работает, по моему мнению, потому что функция не определена в глобальной области видимости.
источник
Что происходит в действительности, если вы передаете строку в качестве первого параметра функции
значение первого полученного параметра, оцененного, когда
number
наступает время запуска (по прошествии миллисекунд). В основном это равноЭто
Таким образом, образцы, на которые вы ссылаетесь, не являются хорошими образцами и могут быть приведены в другом контексте или просто опечатка.
Если вы вызываете так
setTimeout(something, number)
, первый параметр - это не строка, а указатель на что-то вызываемоеsomething
. И снова, еслиsomething
это строка - тогда она будет оценена. Но если это функция, то функция будет выполнена. образец jsbinисточник
источник
С круглыми скобками:
Без кавычек и скобок:
И третье использует только кавычки:
источник