Функция в JavaScript может be either a statement or an expression.При использовании выражения функции, вы можете передать его вокруг, как любое другое значение:
> console.log(function() { 1 + 1; });
> (function() {}) && doExpensiveWork();
// etc.
Одна из вещей, которые вы можете сделать с выражением функции немедленно вызвать его. В таких случаях функция называется an immediately invoked function expression (or IIFE for short):
> (function() { console.log("IIFE running"); })();
IIFE running
Это то же самое, как создание функции и вызова его в два этапа:
> var notAnIIFE = function() { console.log("running"); };
> notAnIIFE();
running
Выражение функция может, конечно, принимать аргументы:
> var someFunction = function(x, y) { return x + y; };
> var seven = someFunction(3, 4);
> seven
7
так IIFE может быть вызвана с аргументами, а также:
> var seven = (function(x, y) { return x + y; })(3, 4);
> seven
7
В случае вызова, как это:
(function($) { /* do work with $ */ })(jQuery);
значение, связанное с именем jQuery
в настоящее время передается в выражение функции в качестве аргумента $
. Это похоже на то, выполнив следующие действия:
var initializePlugin = function($) {
/* do work with $ */
};
initializePlugin(jQuery);
, но она не оставляет никаких следов в родительском пространстве имен (в то время как в нашем втором примере, наше initializePlugin
имя осталось позади после того, как мы закончим настройку нашего плагина).
Спасибо, приятель. Так просто. Я застрял, потому что я запутался в этом jquery, чтобы обернуть эту функцию, и в jQuery-библиотеке, которая использует эту функцию обертки, будет существовать предопределенная переменная jquery. – Mintz
Вы объяснили это очень красиво! –