Javascript: что означает эта линия?
!function ($)
Javascript: что означает эта линия?
!function ($)
Я думаю, что нам не хватает данных, но я делаю ставку, что кусок от закрытия в условном выражении или тройном.
var test = 'Testing!';
(!function ($) {
alert($);
return false;
}(test) ? alert("bad") : alert("good"));
Это не закрытие. – Havvy
@ Хэвви: Конечно. Все функции создают замыкания в JS. –
Мэтт Ло: Вы, безусловно, правы в отношении IIFE, но скорее всего, '!' Используется вместо '()', чтобы заставить функцию оцениваться как часть выражения. [См. Этот вопрос] (http://stackoverflow.com/q/8611700/1106925). Таким образом, результат возврата функции, вероятно, игнорируется. –
Ставлю немного более полную версию будет выглядеть следующим образом:
!function ($) {
// some code
}(jQuery);
В основном выше использует оператор !
иметь анонимную функцию можно интерпретировать как выражение функции, которое затем может быть немедленно вызвано. Уберите !
, и у вас есть недопустимое объявление функции (или оператор функции, в зависимости от вашей предпочтительной терминологии) - неверно, потому что у него нет имени. Более обычный способ сделать это, поместив его в скобках:
(function ($) {
// some code
})(jQuery);
Но некоторые люди хотели бы сохранить характер с помощью !
, а не круглых скобок.
Одна из причин, почему вы можете использовать такой код, чтобы вы могли создать некоторые рабочие переменные, которые не попадают в глобальную область. Или, изнутри анонимной функции, создать объект, который находится в глобальной области действия, но имеет методы, которые могут обращаться к закрытым переменным в области анонимной функции.
Что касается $
аргумента, я просто предполагаю, что jQuery
будет передан в качестве параметра функции, так как это является общим при использовании имени аргумента $
. Одна из причин, по которой вы можете это сделать, - это использовать другую библиотеку, которая определяет $
одновременно с использованием jQuery, но с помощью $
для jQuery в этом блоке.
Ничего, без контекста. Это не отдельное выражение. Покажи нам все остальное! – Cameron
Можете ли вы дать некоторый контекст, как ссылку на файл, откуда он появился, или, по крайней мере, несколько строк выше и ниже? – Simon
Похоже на начало функции самоисполнения, которая не вернет значение. – Havvy