Раньше я знал, что это значит, но сейчас я борюсь ...
Это в основном говорит document.onload
?
(function () {
})();
javascript
iife
Exitos
источник
источник
Ответы:
Это выражение с немедленным вызовом функции , или сокращенно IIFE . Он выполняется сразу после его создания.
Это не имеет никакого отношения к какому-либо обработчику событий (например,
document.onload
).Рассмотрим часть в первой паре скобок: .... это регулярное выражение функции. Затем посмотрите на последнюю пару , это обычно добавляется в выражение для вызова функции; в этом случае наше предыдущее выражение.
(function(){})();
(function(){})();
Этот шаблон часто используется при попытке избежать загрязнения глобального пространства имен, потому что все переменные, используемые внутри IIFE (как и в любой другой нормальной функции), не видны за пределами его области видимости.
Вот почему, может быть, вы перепутали эту конструкцию с обработчиком событий
window.onload
, потому что он часто используется так:Исправление, предложенное Гуффой :
Обновление Поскольку это довольно популярная тема, стоит упомянуть, что IIFE также может быть написано с помощью функции стрелки ES6 (как Гаджус указал в комментарии ):
источник
function(){ var foo = '5'; }
Это просто анонимная функция, которая выполняется сразу после ее создания.
Это так же, как если бы вы присвоили его переменной и использовали сразу после этого, только без переменной:
В jQuery есть похожая конструкция, о которой вы можете подумать:
Это краткая форма привязки
ready
события:Но вышеупомянутые две конструкции не являются IIFE .
источник
Вызов функции с немедленным вызовом (IIFE) немедленно вызывает функцию. Это просто означает, что функция выполняется сразу после завершения определения.
Еще три распространенных формулировки:
Если нет особых требований к его возвращаемому значению, тогда мы можем написать:
В качестве альтернативы это может быть:
Вы даже можете написать:
источник
31.new
'неверный синтаксис;(function(){}());
1 - 1
и вы можете так же легко сделатьtrue - function(){}
. Это только одна вещь (оператор вычитания инфикса), но с другими, даже бессмысленными операндами.Он объявляет анонимную функцию, затем вызывает ее:
источник
arguments
является особенным ; я думаю, что ответчик только что перевернул, где имена идутТо есть казнить немедленно.
так что если я сделаю:
Скрипка: http://jsfiddle.net/maniator/LqvpQ/
Второй пример:
источник
Эта конструкция называется выражением немедленного вызова функции (IIFE), что означает, что она выполняется немедленно. Думайте об этом как о функции, вызываемой автоматически, когда интерпретатор достигает этой функции.
Наиболее распространенный вариант использования:
Одним из наиболее распространенных вариантов использования является ограничение области действия переменной, создаваемой с помощью
var
. Переменные, создаваемые через,var
имеют область видимости, ограниченную функцией, поэтому эта конструкция (которая является оберткой функции вокруг определенного кода) будет следить за тем, чтобы область видимости вашей переменной не просочилась из этой функции.В следующем примере
count
не будет доступно за пределами немедленно вызванной функции, т.е. область действияcount
не будет вытекать из функции. Вы должны получитьReferenceError
, если вы все равно попытаетесь получить доступ к нему вне немедленно вызванной функции.ES6 Альтернатива (рекомендуется)
В ES6 теперь мы можем создавать переменные с помощью
let
иconst
. Оба они имеют блочную область (в отличие от той,var
которая имеет функциональную область).Следовательно, вместо того, чтобы использовать эту сложную конструкцию IIFE для случая использования, о котором я упоминал выше, теперь вы можете написать гораздо более простой код, чтобы убедиться, что область действия переменной не вытекает из желаемого блока.
В этом примере мы использовали
let
определениеcount
переменной,count
ограничивающей блок кода, который мы создали с помощью фигурных скобок{...}
.Я называю это «Кудрявая тюрьма».
источник
Это называется IIFE (выражение для немедленного вызова функции). Один из известных шаблонов проектирования JavaScript, это сердце и душа современного шаблона Module. Как следует из названия, он выполняется сразу после его создания. Этот шаблон создает изолированную или закрытую область выполнения.
В JavaScript до ECMAScript 6 использовалась лексическая область видимости, поэтому IIFE использовался для имитации блока. (С ECMAScript 6 блок - обзорное возможно с введением
let
иconst
ключевых слов.) Справочник по проблеме с лексической области видимостиИмитировать блокобзор с помощью IIFE
Выигрыш в производительности использования IIFE является способность передавать часто используемые глобальные объекты , такие как
window
,document
и т.д. в качестве аргумента за счет уменьшения поиск области видимости. (Помните, что JavaScript ищет свойства в локальной области видимости и поднимается по цепочке до глобальной области видимости). Таким образом, доступ к глобальным объектам в локальной области сокращает время поиска, как показано ниже.источник
Нет, эта конструкция просто создает область для именования. Если разбить его на части, вы увидите, что у вас есть внешний
Это вызов функции. Внутри скобки у вас есть:
Это анонимная функция. Все, что объявлено с помощью var внутри конструкции, будет видно только внутри той же конструкции и не будет загрязнять глобальное пространство имен.
источник
Это выражение немедленного вызова функции в Javascript:
Чтобы понять IIFE в JS, давайте разберем его:
Пример: Попробуйте выполнить следующее в консоли Chrome. Это выражения в JS.
Пример:
Как работает выражение функции:
- Когда механизм JS запускается впервые (Контекст выполнения - Фаза создания), эта функция (справа от = выше) не выполняется и не сохраняется в памяти. Переменной 'greet' присваивается значение 'undefined' механизмом JS.
- Во время выполнения (контекст выполнения - фаза выполнения) объект функции создается на лету ( он еще не выполнен ), ему присваивается переменная 'greet', и его можно вызывать с помощью 'greet (' somename ')'.
3. Сразу же вызванное выражение функции:
Пример:
Как работает IIFE :
- Обратите внимание на '()' сразу после объявления функции. К каждому объекту функции прикреплено свойство «CODE», которое можно вызвать. И мы можем вызвать его (или вызвать) с помощью скобок '()'.
- Таким образом, здесь, во время выполнения (Контекст выполнения - Фаза выполнения), объект функции создается и выполняется одновременно - Так что теперь переменная приветствия вместо объекта функции имеет возвращаемое значение (строку)
Типичный пример использования IIFE в JS:
Следующий шаблон IIFE довольно часто используется.
б) Мы вызываем эту функцию одновременно, используя () в конце.
Таким образом, эта функция создается и выполняется одновременно (IIFE).
Важный сценарий использования IIFE:
IIFE сохраняет наш код в безопасности.
- IIFE, будучи функцией, имеет свой собственный контекст выполнения, то есть все переменные, созданные внутри него, являются локальными для этой функции и не используются совместно с глобальным контекстом выполнения.
Предположим, у меня есть другой файл JS (test1.js), используемый в моем приложении вместе с iife.js (см. Ниже).
Таким образом, IIFE помогает нам писать безопасный код, в котором мы не случайно сталкиваемся с глобальными объектами.
источник
Это вызывающая себя анонимная функция .
Ознакомьтесь с объяснением самопризывной функции в W3Schools .
источник
(function named(){console.log("Hello");}());
<- самовыполняющаяся именованная функцияЭто вызывающая себя анонимная функция. Он выполняется, пока он определен. Это означает, что эта функция определена и вызывает себя сразу после определения.
И объяснение синтаксиса таково: функция в первой
()
круглой скобке - это функция, у которой нет имени, и по следующей();
круглой скобке вы можете понять, что она вызывается во время ее определения. И вы можете передать любой аргумент во второй()
скобке, который будет взят в функции, которая находится в первой скобке. Смотрите этот пример:Здесь «объект», который вы передаете, будет доступен внутри функции через obj, так как вы захватываете его в сигнатуре функции.
источник
Начните здесь:
Поместите это в функцию, и она больше не будет глобальной - ваша основная цель.
Вызовите функцию немедленно - упс:
Используйте скобки, чтобы избежать синтаксической ошибки:
Вы можете не указывать имя функции:
Это не должно быть более сложным, чем это.
источник
Uncaught SyntaxError: Unexpected token )
а не любое упоминание о функции стрелки. Не могли бы вы поделиться с ней скрипкой, выдавшей ошибку функции стрелки?Самоисполняющаяся анонимная функция. Он выполняется, как только он создан.
Один короткий и фиктивный пример, где это полезно:
Таким образом, вместо создания списка каждый раз, вы создаете его только один раз (меньше накладных расходов).
источник
Самоисполняющиеся функции обычно используются для инкапсуляции контекста и предотвращения слияния имен. Любая переменная, которую вы определяете внутри (function () {..}) (), не является глобальной.
Код
производит этот вывод:
Используя этот синтаксис, вы избегаете столкновения с глобальными переменными, объявленными в другом месте вашего кода JavaScript.
источник
var same_name = 1; var myVar = function() { var same_name = 2; console.log(same_name); }; myVar(); console.log(same_name);
Будет иметь тот же результат.Это называется IIFE - выражение для немедленного вызова функции. Вот пример, чтобы показать его синтаксис и использование. Он используется для охвата использования переменных только до функции, а не за ее пределами.
источник
IIFE (немедленно вызванное выражение функции) - это функция, которая выполняется, как только скрипт загружается и уходит.
Рассмотрим функцию ниже, написанную в файле с именем iife.js
Этот код выше будет выполняться, как только вы загрузите iife.js и напечатает « Hello Stackoverflow!». на консоли инструментов разработчика.
Подробное объяснение см. В разделе « Вызов функции с немедленным вызовом» (IIFE).
источник
Еще один вариант использования - это запоминание, при котором объект кэша не является глобальным:
источник
Ан
IIFE
также может быть описан как самовывозная анонимная функция. Его наиболее распространенное использование - ограничить область действия переменной, создаваемой через var, или инкапсулировать контекст, чтобы избежать конфликтов имен.источник
Причина того, что используются вызывающие себя анонимные функции, заключается в том, что они никогда не должны вызываться другим кодом, поскольку они «настраивают» код, который должен вызываться (наряду с предоставлением области видимости функциям и переменным).
Другими словами, они похожи на программы, которые «создают классы» в начале программы. После того, как они были созданы (автоматически), единственными доступными функциями являются те, которые возвращаются анонимной функцией. Однако все остальные » скрытые 'функции все еще там, наряду с любым состоянием (переменные, установленные во время создания области видимости).
Очень круто.
источник
Следующий код:
называется немедленно вызывается функция выражения (IIFE).
Это называется выражением функции, потому что
( yourcode )
оператор в Javascript принудительно превращает его в выражение. Разница между выражением функции и функции декларации заключается в следующем:Выражение - это просто набор кода, который может быть оценен до одного значения . В случае выражений в вышеприведенном примере это значение было единственным объектом функции .
После того, как у нас есть выражение, которое оценивает функциональный объект, мы можем немедленно вызвать функциональный объект с
()
оператором. Например:Почему это полезно?
Когда мы имеем дело с большой кодовой базой и / или когда мы импортируем различные библиотеки, вероятность конфликтов имен увеличивается. Когда мы пишем определенные части нашего кода, которые связаны (и поэтому используют одни и те же переменные) внутри IIFE, все переменные и имена функций попадают в скобки функций IIFE . Это уменьшает шансы на конфликты имен и позволяет вам назвать их более небрежно (например, вам не нужно префиксировать их).
источник
В синтаксисе ES6 (постинг для себя, поскольку я продолжаю заходить на эту страницу в поисках быстрого примера):
источник
Эта функция называется функцией самовозбуждения. Самовозвратная (также называемая самоисполняющаяся) функция - это безымянная (анонимная) функция, которая вызывается (вызывается) сразу после ее определения. Узнайте больше здесь
Что эти функции делают, так это то, что когда функция определена, функция вызывается немедленно, что экономит время и дополнительные строки кода (по сравнению с вызовом ее в отдельной строке).
Вот пример:
источник
Это более подробное объяснение того, почему вы должны использовать это:
«Основная причина использования IIFE состоит в том, чтобы обеспечить конфиденциальность данных. Поскольку переменная JavaScript использует переменные для их содержащей функции, внешний мир не может получить доступ к любым переменным, объявленным в IIFE».
http://adripofjavascript.com/blog/drips/an-introduction-to-iffes-immediately-invoked-function-expressions.html
источник
Это выражение функции, оно обозначает выражение «немедленно вызванная функция» (IIFE). IIFE - это просто функция, которая выполняется сразу после ее создания. Таким образом, благодаря функции, ожидающей, пока она не будет вызвана, IIFE выполняется немедленно. Давайте построим IIFE на примере. Предположим, у нас есть функция добавления, которая принимает два целых числа в качестве аргументов и возвращает сумму, позволяющую превратить функцию добавления в IIFE,
Шаг 1: Определите функцию
Шаг 2: Вызовите функцию, заключив объявление всей функции в круглые скобки.
Шаг 3: Для немедленного вызова функции просто удалите текст «добавить» из вызова.
Основная причина использования IFFE состоит в том, чтобы сохранить частную область действия в вашей функции. Внутри вашего JavaScript-кода вы хотите убедиться, что вы не переопределяете ни одну глобальную переменную. Иногда вы можете случайно определить переменную, которая переопределяет глобальную переменную. Давайте попробуем на примере. Предположим, у нас есть HTML-файл с именем iffe.html и коды внутри тега body:
Итак, приведенный выше код будет выполняться без каких-либо вопросов, теперь предположим, что вы объявили переменную с именем document случайно или намеренно.
вы в конечном итоге в SyntaxError : документа глобального свойства.
Но если вы хотите объявить переменную имени документа, вы можете сделать это с помощью IFFE.
Вывод:
Давайте попробуем на другом примере, предположим, у нас есть объект калькулятора, как показано ниже:
Ну, это работает как шарм, что если мы случайно переназначим значение объекта калькулятора.
да, вы получите ошибку TypeError: calculator.mul не является функцией iffe.html
Но с помощью IFFE мы можем создать частную область видимости, где мы можем создать еще один калькулятор имен переменных и использовать его;
Вывод:
источник
Я думаю, что 2 набора скобок немного запутывают, но я видел другое использование в примере с Google, они использовали нечто подобное, надеюсь, это поможет вам лучше понять:
поэтому, если
windows.app
он не определен, тоwindow.app = {}
выполняется немедленно, поэтомуwindow.app
ему присваивается значение{}
во время оценки условия, поэтому результат равен обоим,app
иwindow.app
теперь он становится{}
, поэтому вывод консоли:источник
Обычно мы не вызываем функцию сразу после того, как записали ее в программу. Проще говоря, когда вы вызываете функцию сразу после ее создания, она называется IIFE - причудливое имя.
источник
Обычно код JavaScript имеет глобальную область применения. Когда мы объявляем глобальную переменную в ней, есть шанс использовать ту же самую дублирующую переменную в какой-то другой области разработки для какой-то другой цели. Из-за этого дублирования может произойти какая-то ошибка. Таким образом, мы можем избежать этих глобальных переменных с помощью немедленного вызова выражения функции, это выражение является самоисполняющимся выражением. Когда мы создаем наш код внутри этого IIFE выражением. выражения глобальная переменная будет похожа на локальную область видимости и локальную переменную.
Мы можем создать IIFE двумя способами
ИЛИ
В приведенном выше фрагменте кода « var app » теперь является локальной переменной.
источник