Синтаксис jquery function () {mylongfunc ();} и просто mylongfunc (); - PullRequest
1 голос
/ 13 апреля 2010

почему я должен это сделать:

$('#myfoo').change(function(){mylongfunc();});

вместо этого:

$('#myfoo').change(mylongfunc());

что делает эта дополнительная функция () {} обертка?

Ответы [ 3 ]

2 голосов
/ 13 апреля 2010

Вам не нужна функция-обертка, просто небольшая настройка вашего подхода, например:

$('#myfoo').change(mylongfunc);

function() {} - это просто анонимная функция, вы можете использовать именованную функцию напрямую, как хотите, просто передайте функцию.

mylongfunc //passes the function
mylongfunc() //passes the RESULT of the function
0 голосов
/ 13 апреля 2010

Используется анонимная функция.

$('#myfoo').change(function(){mylongfunc();});

При этом используется предопределенная, многократно используемая функция. Примечание: Я удалил () из mylongfunc

$('#myfoo').change(mylongfunc);

Основное правило таково:

Используйте анонимные функции, когда они будут использоваться только один раз.

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

0 голосов
/ 13 апреля 2010

Есть небольшая разница.

Когда вы делаете function(){ myLongFunc(); }, вы определяете анонимную функцию, которая является оберткой вокруг myLongFunc.

Когда вы делаете change(myLongFunc()), вы не получаете ожидаемого результата, потому что на самом деле вызывает функцию и передает результат вызова change.

Итак, что вы на самом деле хотите сделать, это change(myLongFunc), потому что теперь вы передаете реальный объект функции.

Существует еще один сценарий:

var myLongFunc = function() { ... };

Теперь, когда вы передаете myLongFunc, вы передаете ссылку на анонимную функцию.

Другая форма, которую принимают функции Javascript - это литерал функции, где вы определяете функцию и вызываете ее немедленно. Это работает, потому что функции являются первоклассными объектами в Javascript:

(function() {
 ...
})();

или даже:

(function myFunc() {
 ...
})();

В этом сценарии вы определяете функцию и вызываете ее немедленно. Эта форма обычно используется для пространства имен и инкапсуляции при создании каркасов или библиотек. Это делает jQuery, и он называется шаблоном модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...