Выражение Javascript Wrapped Function или body [duplicate]

Я знал, что это значит, но сейчас я боюсь ...

В основном ли это document.onload?

(function () {

})();
599
задан 22 March 2017 в 20:23

17 ответов

Вызываемое выражение функции (IIFE) сразу же является функцией, которая выполняется, как только она создается. Он не связан ни с какими событиями, ни с асинхронным исполнением. Вы можете определить IIFE, как показано ниже:
(function() {
     // all your code here
     // ...
})();

Вызываемое выражение функции (IIFE) - это функция, которая выполняется сразу же после ее создания. Он не связан ни с какими событиями, ни с асинхронным исполнением. Вы можете определить IIFE, как показано ниже:

Первая пара круглых скобок function () {...} преобразует код в круглые скобки в выражение. Вторая пара круглых скобок вызывает функция, полученная из выражения.

1
ответ дан 15 August 2018 в 14:46

Нет, эта конструкция просто создает область для именования. Если вы разбили его по частям, вы увидите, что у вас есть внешний

(...)();

Это вызов функции. Внутри круглой скобки у вас есть:

function() {}

Это анонимная функция. Все, что объявлено с помощью var внутри конструкции, будет видимо только внутри одной и той же конструкции и не будет загрязнять глобальное пространство имен.

11
ответ дан 15 August 2018 в 14:46

IIFE (Немедленно вызывается выражение функции) - это функция, которая выполняется, как только скрипт загружается и уходит.

Рассмотрим приведенную ниже функцию в файле с именем iife.js

(function(){
       console.log("Hello Stackoverflow!");
   })();

. Этот код, указанный выше, будет выполнен, как только вы загрузите iife.js и напечатаете «Hello Stackoverflow!». на консоли разработчика.

Подробное объяснение см. Выражение выраженной функции (IIFE)

2
ответ дан 15 August 2018 в 14:46

Это анонимная функция, которая сама вызывает вызов. Обычно известный как Immediatly вызываемое выражение функции (IIFE).

1
ответ дан 15 August 2018 в 14:46

Это просто анонимная функция, которая выполняется сразу после ее создания.

Это точно так же, как если бы вы назначили ее переменной и использовали ее сразу после, только без переменной:

var f = function () {
};
f();

В jQuery есть аналогичная конструкция, о которой вы могли бы подумать:

$(function(){
});

Это краткая форма привязки события ready:

$(document).ready(function(){
});
91
ответ дан 15 August 2018 в 14:46

Это выражение с выражением немедленного вызова в Javascript:

Чтобы понять IIFE в JS, давайте сломаем его:

Выражение: что-то, возвращающее значение. Пример: Попробуйте следующее в хромированной консоли. Это выражения в JS.
a = 10 
output = 10 
(1+3) 
output = 4
Выражение: что-то, возвращающее значение. Пример. Попробуйте выполнить в хром-консоли. Это выражения в JS.
// Function Expression 
var greet = function(name){
   return 'Namaste' + ' ' + name;
}

greet('Santosh');

Как работает выражение функции: - Когда JS-движок запускается в первый раз (Execution Context - Create Phase), это функция (с правой стороны = выше) не может быть выполнена или сохранена в памяти. Переменной «greet» присваивается значение «undefined» двигателем JS. - Во время выполнения (Execution Context - Execute phase) объект funtion создается «на лету» (еще не выполнен), получает назначение переменной «greet» и может быть вызван с помощью «greet (« somename »)».

Как работает выражение функции:

Пример:

// IIFE
var greeting = function(name) {
    return 'Namaste' + ' ' + name;
}('Santosh')

console.log(greeting)  // Namaste Santosh. 

Как работает IIFE: - Обратите внимание на «()» сразу после объявления функции. Каждый объект funtion имеет прикрепленное к нему свойство «CODE», которое может быть вызвано. И мы можем вызвать его (или вызвать) с помощью скобок (). - Так вот, во время выполнения (Execution Context - Execute Phase), его еще не выполнили - Теперь переменная приветствия вместо объекта funtion имеет свое возвращаемое значение (строка) [ ! d20]

Как работает IIFE

Обычно используется шаблон IIFE.

// IIFE 
// Spelling of Function was not correct , result into error
(function (name) {
   var greeting = 'Namaste';
   console.log(greeting + ' ' + name);
})('Santosh');
мы делаем здесь две вещи. a) Обертывание выражения функции внутри фигурных скобок (). Это означает, что синтаксический синтаксический анализатор все, что помещается внутри (), является выражением (выражение функции в этом случае) и является допустимым кодом. б) Мы вызываем эту функцию в то же время, используя () в конце ее.

Таким образом, эта функция создается и выполняется одновременно (IIFE).

Таким образом, эта функция создается и выполняется одновременно (IIFE).

IIFE сохраняет наш код в безопасности. - IIFE, являясь функцией, имеет свой собственный контекст выполнения, то есть все переменные, созданные внутри него, являются локальными для этой функции и не разделяются с глобальным контекстом выполнения.

Предположим, что у меня есть другой JS-файл (test1.js), используемый в моем приложении вместе с iife.js (см. ниже).

// test1.js

var greeting = 'Hello';

// iife.js
// Spelling of Function was not correct , result into error
(function (name) { 
   var greeting = 'Namaste';
   console.log(greeting + ' ' + name);
})('Santosh');

console.log(greeting)   // No collision happens here. It prints 'Hello'.

Итак, IIFE помогает нам IIFE сохраняет наш код в безопасности.

6
ответ дан 15 August 2018 в 14:46

Я думаю, что два набора скобок делают это немного запутанным, но я видел другое использование в примере googles, они использовали что-то похожее, я надеюсь, что это поможет вам лучше понять:

var app = window.app || (window.app = {});
console.log(app);
console.log(window.app);

, так что если windows.app не определен, тогда window.app = {} немедленно выполняется, поэтому window.app назначается с помощью {} во время оценки условия, поэтому результат app и window.app теперь становятся {}, поэтому консоль выход:

Object {}
Object {}
0
ответ дан 15 August 2018 в 14:46

Обычно мы не вызываем функцию сразу после ее записи в программе. В чрезвычайно простых терминах, когда вы вызываете функцию сразу после ее создания, она называется IIFE - причудливое имя.

0
ответ дан 15 August 2018 в 14:46

Это говорит, что выполняйте немедленно.

, так что если я делаю:

var val = (function(){
     var a = 0;  // in the scope of this function
     return function(x){
         a += x;
         return a;
     };
})();

alert(val(10)); //10
alert(val(11)); //21

Fiddle: http://jsfiddle.net/maniator/LqvpQ/

Второй пример:

var val = (function(){
     return 13 + 5;
})();

alert(val); //18
26
ответ дан 15 August 2018 в 14:46

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

Другими словами, они похожи на программы, которые «делают классы» в начале программы. После того, как они создаются (автоматически), единственными доступными функциями являются те, которые возвращаются анонимной функцией. другие «скрытые» функции все еще существуют вместе с любым состоянием (переменные, заданные при создании области).

Очень круто.

6
ответ дан 15 August 2018 в 14:46

Обычно код javascrypt имеет глобальную область применения. Когда мы объявляем глобальную переменную в нем, есть шанс использовать ту же повторяющуюся переменную в какой-то другой области разработки для какой-либо другой цели. Из-за этого дублирования может произойти некоторая ошибка. Таким образом, мы можем избежать этих глобальных переменных, используя сразу вызывающее выражение функции, это выражение является самоисполняющимся выражением. Когда мы делаем наш код внутри этого выражения IIFE, глобальная переменная будет похожа на локальную область и локальную переменную.

Two мы можем создать IIFE

(function () {
    "use strict";
    var app = angular.module("myModule", []);
}());

OR

(function () {
    "use strict";
    var app = angular.module("myModule", []);
})();

В приведенном выше фрагменте кода «var app» теперь является локальной переменной.

0
ответ дан 15 August 2018 в 14:46

Начать здесь:

var b = 'bee';
console.log(b);  // global

Поместить его в функцию, и он больше не является глобальным - ваша основная цель.

function a() {
  var b = 'bee';
  console.log(b);
}
a();
console.log(b);  // ReferenceError: b is not defined -- *as desired*

Вызвать функцию немедленно - oops :

function a() {
  var b = 'bee';
  console.log(b);
}();             // SyntaxError: Expected () to start arrow function, but got ';' instead of '=>'

Используйте круглые скобки, чтобы избежать синтаксической ошибки:

(function a() {
  var b = 'bee';
  console.log(b);
})(); // OK now

Вы можете оставить имя функции:

(function () {    // no name required
  var b = 'bee';
  console.log(b);
})();

'нужно быть более сложным, чем это.

3
ответ дан 15 August 2018 в 14:46

Это автономная анонимная функция.

Ознакомьтесь с объяснением W3Schools функции самозапускания.

Выражения функций можно сделать «самозапускающимися». Самозапускаемое выражение вызывается автоматически (автоматически) без вызова. Выражения функции будут выполняться автоматически, если за выражением следует (). Вы не можете самостоятельно вызывать объявление функции.
8
ответ дан 15 August 2018 в 14:46

Объявляет анонимную функцию, затем называет ее:

(function (local_arg) {
   // anonymous function
   console.log(local_arg);
})(arg);
31
ответ дан 15 August 2018 в 14:46
(function () {
})();

Это называется IIFE (Expression Exited Function Expression). Один из знаменитых шаблонов дизайна javascript, и это сердце и душа современного модульного модуля. Как видно из названия, он выполняется сразу после его создания. Этот шаблон создает изолированную или личную область выполнения.

JavaScript до ECMAScript 6 с использованием лексического охвата, IIFE используется для имитации охвата блока. (С помощью блочного охвата ECMAScript 6 возможно введение ключевого слова let и const.) Ссылка на вопрос с лексическим охватом

Ссылка на вопрос с лексическим охватом

Преимущество производительности использования IIFE заключается в возможности передавать общеупотребительные глобальные объекты, такие как окно, документ и т. Д. В качестве аргумента можно уменьшить просмотр области. (Помните, что Javascript ищет свойство в локальной области и вверх по цепочке до глобальной области). Таким образом, для доступа к глобальным объектам в локальной области, уменьшите время поиска, как показано ниже.

(function (globalObj) {
//Access the globalObj
})(window);
18
ответ дан 15 August 2018 в 14:46

Вызываемое немедленно выражение функции (IIFE) сразу вызывает функцию. Это просто означает, что функция выполняется сразу после завершения определения.

Три более распространенных формулировки:

// Crockford's preference - parens on the inside
(function() {
  console.log('Welcome to the Internet. Please follow me.');
}());

//The OPs example, parentheses on the outside
(function() {
  console.log('Welcome to the Internet. Please follow me.');
})();

//Using the exclamation mark operator
//https://stackoverflow.com/a/5654929/1175496
!function() {
  console.log('Welcome to the Internet. Please follow me.');
}();

Если особых значений для возвращаемого значения нет, тогда мы можем написать:

!function(){}();  // => true
~function(){}(); // => -1
+function(){}(); // => NaN
-function(){}();  // => NaN

В качестве альтернативы это может быть:

~(function(){})();
void function(){}();
true && function(){ /* code */ }();
15.0, function(){ /* code */ }();

Вы даже можете написать:

new function(){ /* code */ }
31.new function(){ /* code */ }() //If no parameters, the last () is not required
43
ответ дан 15 August 2018 в 14:46

Автономная анонимная функция.

Один короткий и фиктивный пример, где это полезно:

function prepareList(el){
  var list = (function(){
    var l = []; 
    for(var i = 0; i < 9; i++){
     l.push(i);
    }
    return l;
  })();

  return function (el){
    for(var i = 0, l = list.length; i < l; i++){
      if(list[i] == el) return list[i];
    }
    return null;
  }; 
} 

var search = prepareList();
search(2);
search(3);

Поэтому, вместо создания списка каждый раз, вы создаете его только один раз (меньше накладные расходы).

3
ответ дан 15 August 2018 в 14:46

Другие вопросы по тегам:

Похожие вопросы: