Самовызывающиеся функции в JavaScript - PullRequest
10 голосов
/ 27 октября 2010

В чем разница между этими функциями? Спасибо за ответ!

Функция # 1

var myQuery = (function() {

  (...)

})();

Функция # 2

var myQuery = (function() {

  (...)

});

Ответы [ 4 ]

9 голосов
/ 27 октября 2010

В первом случае вы сами вызываете литерал функции и присваиваете значение вызова переменной myQuery.

Во втором случае вы присваиваете ссылку наанонимная функция, которую вы определили.Здесь myQuery действует как указатель или ссылка на функцию.

Для лучшей иллюстрации.

var myQuery = (function() {
   return "Hello";
})();

В этом случае myQuery содержит значение Hello.Теперь, если у вас есть:

var myQuery = (function() {
   return "Hello";
});

myQuery содержит ссылку на функцию.Если бы вы использовали console.log в Firebug для вывода этого значения, вы бы увидели function().Эта ссылка - то, что вы можете передать или даже вызвать.Итак:

var myQuery = (function() {
   return "Hello";
});

var value = myQuery();

Теперь value будет содержать Hello.Надеюсь, это объясняет разницу.

4 голосов
/ 27 октября 2010

Я упросту Function #2 и, возможно, это лучше покажет различия.

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

В функции # 2 вы говорите: «Назначьте myQuery ссылку на эту функцию». В функции # 1 вы говорите: «Присвойте myQuery значение вызова этой функции».

0 голосов
/ 27 октября 2010

хорошо, первая функция выполняется при прохождении строки, а вторая должна быть выполнена, чтобы получить значение

Например: http://jsfiddle.net/yVrwX/

0 голосов
/ 27 октября 2010

Первая - это самопризывающаяся функция, вызываемая с пустым списком параметров.Значение myQuery будет тем, что возвращает эта функция.

Вторым является простое назначение анонимной функции.В этом нет вызова.

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