#javascript #jquery
#javascript #jquery
Вопрос:
Если я вызываю свои JS-скрипты непосредственно перед закрывающим тегом body, есть ли разница между использованием функции jQuery ready, например $(myfunc());
, и просто использованием simply myfunc();
?
Комментарии:
1. Я предполагаю, что
$(myfunc())
вы на самом деле имеете в виду$(myfunc)
.2. Был ли мой пример недопустимым сокращением? Ну, я имею в виду: $(document) . ready(функция() { myfunc(); }); против myfunc();
3. Зависит от того, что вы понимаете под valid .
$(myfunc())
выполнитmyfunc
и передаст возвращаемое значение$()
. Покаmyfunc
возвращает функцию, все в порядке. Но это не эквивалентно вызовуmyfunc
в конце страницы. Это было бы$(myfunc)
.4. @IMB
$(x());
и$(function () { x(); });
не совпадают. В первом случае функция вызывается немедленно, а во втором случае она вызывается в DOM-ready . Это правильный способ передачи функции внутри обработчика, готового к DOM:$(x);
5. @IMB: Да, вы передаете анонимную функцию, которая просто вызывает другую функцию и передает параметры.
Ответ №1:
Будет существовать только одно отличие:
Когда вы используете $(function(){...})
(сокращение от $(document).ready(function(){...})
, вы автоматически оборачиваете код в анонимную функцию, создавая таким образом закрытую область. Переменные, определенные с использованием var
внутри этой области, не передаются в глобальную область.
<script>
$(function(){ //<-- Anonymous function wrapper
var test = 1; //"Private" variable
alert(test); //Alert: 1
});
alert(window.test); //Nothing
</script>
<body>
Против
<script>
var test = 1;
alert(test); //Alert: 1
alert(window.test); //Alert: 1
</script>
</body>
Когда вы не оборачиваете вызов функции в оболочку, оба подхода дают одинаковый результат:
<script>
$(myfunc);
</script></body>
</bodY><script>
myfunc();
</script>
Комментарии:
1. Можно ли с уверенностью сказать, что, если мне действительно не нужны «расширенные» функции jquery, мне лучше использовать:
<script>myfunc();</script></body>
вместо$(myfunc);
илиwindow.onload = myfunc;
? Моя цель — убедиться, что DOM загружен до выполнения myfunc.2. Если вы хотите выполнить свой код, как только DOM будет готов, не рассматривайте
window.onload
. Преимущество$
в том, что его можно определить где угодно. Преимущество простогоmyfunc()
в том, что он не зависит от jQuery (= внешнего фреймворка).