Чем данная запись timer[i] = setTimeout(function() {document.getElementById("PopMenu" + i).style.display = "none"}, 300);
Отличается от timer[i] = setTimeout(document.getElementById("PopMenu" + i).style.display = "none", 300);
Почему нельзя просто написать как на второй записи? Если написать как на второй, то задержка в 300 не работает
jQuery
Правило работы функции setTimeout
setTimeout - функция, и она требует другую функцию в виде первого аргумента.
setTimeout(document.getElementById("PopMenu" + i).style.display = "none", 300);
при вызове функции сначала выполняется инструкция
document.getElementById("PopMenu" + i).style.display = "none"
Она возвращает строку "none" и получается то же самое, что
document.getElementById("PopMenu" + i).style.display = "none";
setTimeout("none", 300);
У setTimeout осталась возможность выполнять строку кода (которую не надо использовать), и это фактически выполняется как
setTimeout(function() {
"none";
}, 300);
Создается строка, и ничо не происходит)
setTimeout(document.getElementById("PopMenu" + i).style.display = "none", 300);
при вызове функции сначала выполняется инструкция
document.getElementById("PopMenu" + i).style.display = "none"
Она возвращает строку "none" и получается то же самое, что
document.getElementById("PopMenu" + i).style.display = "none";
setTimeout("none", 300);
У setTimeout осталась возможность выполнять строку кода (которую не надо использовать), и это фактически выполняется как
setTimeout(function() {
"none";
}, 300);
Создается строка, и ничо не происходит)
Контекстом выполнения
>> Почему нельзя просто написать как на второй записи?
Разве кто то запрещает тебе так писать? Бери и пиши просто написанный код не будет работать как ты ожидаешь.
>> Если написать как на второй, то задержка в 300 не работает
Это ошибочное мнение. Задержка сработает и setTimeout вызовет то что ей передали в первом параметре.
От сюда можно сделать выводы что в твоих ожиданиях (суждениях) есть ошибка осталось ее найти и не повторять в будущем.
Есть функция setTimeout() она может принимать два параметра.
Параметры должны иметь какой то тип и какое то значение.
В обоих случаях вместо конкретного параметра ты используешь выражение.
Выражение не может быть параметром для функции по этому интерпретатор исполняет это выражение и возвращает результат как параметр в функцию.
В первом случае выражение вернет объект типа function.
Во втором случае выражение вернет объект типа undifined.
Затем происходит вызов функции setTimeout c полученными параметрами.
Во втором случае достаточно заменить выражение на строку строка это уже конкретный параметр который может принять функция setTimeout
т. е.
setTimeout( "document.getElementById(/"PopMenu/" +" +i+ ").style.display = /"none/"", 300);
Стоит обратить внимание на то что строки не создают замыкания в отличии от функциональных выражений по этому в них нельзя использовать переменные из внешнего окружения.
Разве кто то запрещает тебе так писать? Бери и пиши просто написанный код не будет работать как ты ожидаешь.
>> Если написать как на второй, то задержка в 300 не работает
Это ошибочное мнение. Задержка сработает и setTimeout вызовет то что ей передали в первом параметре.
От сюда можно сделать выводы что в твоих ожиданиях (суждениях) есть ошибка осталось ее найти и не повторять в будущем.
Есть функция setTimeout() она может принимать два параметра.
Параметры должны иметь какой то тип и какое то значение.
В обоих случаях вместо конкретного параметра ты используешь выражение.
Выражение не может быть параметром для функции по этому интерпретатор исполняет это выражение и возвращает результат как параметр в функцию.
В первом случае выражение вернет объект типа function.
Во втором случае выражение вернет объект типа undifined.
Затем происходит вызов функции setTimeout c полученными параметрами.
Во втором случае достаточно заменить выражение на строку строка это уже конкретный параметр который может принять функция setTimeout
т. е.
setTimeout( "document.getElementById(/"PopMenu/" +" +i+ ").style.display = /"none/"", 300);
Стоит обратить внимание на то что строки не создают замыкания в отличии от функциональных выражений по этому в них нельзя использовать переменные из внешнего окружения.
Потому что первое в setTimeout должна быть функция, вторая аргумент, можешь сделать через var fun = function(){};
Похожие вопросы
- Что такое эпитет? Правило и функцию.
- Правила работы и оформления документов в паспортном столе
- Плииз!!Лабораторная работа по биологии за 10 класс.Тема:Основные правила работы с микроскопом.Морфология растительных и
- Какой модели по вашему лучше брать принтер для школьных работ? Функции: Копирование Сканирование Недорогой до 5тыс
- Биология 8 класс лабораторная работа-"Функция венозных клапанов".
- Правила работы кафе
- Правила работы с подносом в ресторанах
- Правила работы с микроскопом?
- правила работы с топором на природе
- Уважаемые маги! Каковы правила работы и техника безопасности в некрозоне?