2014-09-27 6 views
0

Я пытался понять анонимные функции. Я понял, что добавление дополнительных скобок в конце помогает анонимным функциям выполнять. Тем не менее, я также сталкивался с кодом, который, кажется, выполняет анонимную функцию без дополнительных скобок, и, к моему удивлению, я не мог найти использование метода jquery ready. Это что-то вроде: -Выполнение анонимных функций в Javascript

$(function() { 

    $('#login_form #username').validator({ 
     format: 'alphanumeric', 
     invalidEmpty: true, 
     correct: function() { 
      $('#login_form #username').text('Thanks'); 
     }, 
     error: function() { 
      $('#login_form #username').text('Plese fill username field'); 
     } 
    }); 

}); 

Этот файл просто включен в html-файл, содержащий форму. Я не могу понять, как этот код выполняется автоматически. Может ли кто-нибудь помочь пролить свет на это? Кроме того, что разница будет лишние скобки сделать, такие как: -

$(function() { 

    $('#login_form #username').validator({ 
     format: 'alphanumeric', 
     invalidEmpty: true, 
     correct: function() { 
      $('#login_form #username').text('Thanks'); 
     }, 
     error: function() { 
      $('#login_form #username').text('Plese fill username field'); 
     } 
    }); 

})(); 
+0

Код в этом вопросе никак не связан с плагином jQuery Validate, и вопрос заключается не в проверке формы. Удален тег [tag: jquery-validate]. Благодарю. – Sparky

+2

См. Http://api.jquery.com/ready/ – Sparky

+0

Хорошо, спасибо. Все еще учатся и привыкают к этому сайту. – Grateful

ответ

2

$ есть функция JQuery. Таким образом, $() - вызов функции. И:

$(function() { /* code here */}); 

- вызов функции, к которому вы передаете анонимную функцию. Функция $ затем вызовет эту анонимную функцию в будущем. В случае jQuery он будет вызывать эту функцию, когда DOM будет загружен и готов к манипуляции. Это синтаксис ярлыка, который я не использую в первую очередь, потому что он смущает людей, которые не знакомы с jQuery, но другим нравится это для его краткости. Это сокращенно:

$(document).ready(function() { /* code here */}); 

, который я лично нахожу немного более самоописательным.

Это НЕ выполняемые анонимные функции. Это другая конструкция для другой цели. Это просто простой вызов функции, как ready() будет, с одним добавлением передачи его функции.

Дополнительные парады на вашей второй конструкции не нужны и ничего не добавляют в этом конкретном случае.

+0

Ничего себе. Спасибо за это. – Grateful

+0

@Grateful - Эти дополнительные парсеры в этом конкретном случае ничего не добавляют и не полезны или необходимы. Существуют и другие обстоятельства, при которых они имеют смысл, но не в этом случае, потому что функция уже выполнена. – jfriend00

+0

Понял, спасибо еще раз. – Grateful

0

Вы просто вызываете функцию с определенным именем. Название функции: $. Если вы сделаете что-то $() в отладчике, вы увидите, что он его выполнит. Вы можете передать параметр этой функции.

В вашем случае ваш параметр является функцией. Но вы можете сделать что-то вроде этого: $(console.log(1))

Смежные вопросы