Jquery ready() против простого вызова функции перед

#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 (= внешнего фреймворка).