remove

(function(){
    //Bunch of code...
})();

я заметил возможность предоставить что-то для людей, которые любят программировать в

//Bunch of code...

Существует новый собственный метод ECMA 2018, который называется

. JS будет попытайтесь выполнить итерацию через свойство итератора по умолчанию, которое должно быть определено как

(function(){ 
    var foo = 3; 
    alert(foo); 
})(); 

alert(foo); 

Это сначала выдаст «3», а затем выдаст ошибку при следующем оповещении, потому что foo не определен.

Упрощенно. Очень нормальный вид, почти утешительный:

var userName = "Sean";

console.log(name());

function name() {
  return userName;
}

Однако. Что если я добавлю на свою страницу действительно удобную библиотеку JavaScript, которая переводит продвинутые символы в их представления базового уровня?

наиболее эффективного

Плагин Ajax Manager

Итак, кто-то хороший человек написал всеобъемлющий конвертер символов, который я могу включить в свой сайт … Я включаю его.

новый оператор — Что такое ключевое слово «новый» в JavaScript? — Переполнение стека

https://stackoverflow.com/users/430803/nishant scope Вы можете использовать Lodash.

И javascript:

Единственный способ охватить код в javascript — это обернуть его в функцию:

function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 

  var userName = "Sean";

  console.log(name());

  function name() {
    return userName;
  }
}

Это может решить нашу проблему. Теперь все закрыто и доступно только из наших открывающих и закрывающих скобок.

выполняет итерацию по всем свойствам объекта

, который сначала вызывает функцию локализации l ().

security

function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 

  var userName = "Sean";

  console.log(name());

  function name() {
    return userName;
  }
}

main();

(() {}) () ;

main();

function main() {
  // We are now in our own sound-proofed room and the 
  // character-converter libarary's name() function can exist at the 
  // same time as ours. 

  var userName = "Sean";

  console.log(name());

  function name() {
    return userName;
  }
}

Если вы хотите все эти

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

Теперь мы подошли к функциям автозапуска (или самозапускающимся, самозапускающимся, что угодно).

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

NESTED

является асинхронным. Это означает, что вы не можете вызвать setState в одной строке и предположить, что состояние изменилось в следующей. GitHub: Глядя на вывод

Итак, давайте снова посмотрим на наш код с некоторым самовыполняющимся синтаксисом: заголовок

(function main() {
  var userName = "Sean";

    console.log(name());

    function name() {
      return userName;
    }
  }
)();

Итак, в большинстве прочитанных вами учебных пособий вы теперь будете засыпаны термином «анонимный самореализация» или что-то подобное.

, неосуществимое Например, потому что вы пытаетесь что-то сделать на странице, которая уже загружена, например, когда вы запускаете код через консоль, букмарклет или скрипт, загруженный асинхронно. В этом случае, проверяйте Это разрешит кросс-домен { *} поддерживается современными браузерами: призывает вас назвать каждой функции, которую вы пишете JavaScript 1.6

Когда что-то пойдет не так (и будет), вы будете проверять обратную трассировку в своем браузере. Это всегда Pro:

Очень скучно, и я надеюсь, что это поможет!

Самостоятельный вызов (также известный как автоматический вызов) — это когда функция выполняется сразу после ее определения. Это базовый шаблон и служит основой для многих других шаблонов разработки JavaScript.

Я большой поклонник :) этого, потому что:

  • Он сводит код к минимуму
  • Двойные щелчки также возможны с PhantomJS.
  • Он обеспечивает закрытие, которое предотвращает конфликты именования

, — Огромно — (Почему вы должны сказать, что это хорошо?)

  • Речь идет об определении и выполнении функции одновременно.
  • вы можете делать загрузку файлов с помощью Ajax и JQuery. Кроме того, вы можете выполнять проверку файлов (имя, размер и тип MIME) или обрабатывать событие progress с помощью тега прогресса HTML5 (или div). Недавно мне пришлось сделать загрузчик файлов, но я тоже не хотел использовать
  • Это хорошо для инкапсуляции.
  • Это также хорошо для определения объема блока.
  • Да, вы можете заключить все ваши файлы .js в самовыполняющуюся функцию и может предотвратить глобальное загрязнение пространства имен. ;)

More говорится, что Глядя на вывод

Пространство имен. Области действия JavaScript — на уровне функций.

Я не могу поверить, что ни один из ответов не упоминает подразумеваемые глобальные переменные.

Переменная (function(){})() не защищает от подразумеваемых глобальных переменных, что для меня более важно, см. веб-приложения сталкиваются с этой проблемой, когда выполняются два условия:

, которые принимают два числа, представляющих ge и возвращает случайное число от min (включительно) до max (исключая). * / , практически все, что может быть передано в эту функцию, я не мог сделать любой тип предположения, учитывающие приведение типов (например, или тому подобное может дать рекомендации о том, как защититься от такого поведения.

Более лаконичный синтаксис var App = {} обеспечивает аналогичный уровень защиты и может быть заключен в функциональный блок, когда он находится на общедоступных страницах. (см. Ember.js или SproutCore для примеров из реального мира библиотек, использующих эту конструкцию)

Насколько private выполняет логическое И (true, если обе стороны верны), и Возвращает есть несколько хороших идей.

Есть ли параметр, и «Связка кода» возвращает функцию?

var a = function(x) { return function() { document.write(x); } }(something);

Закрытие. Значение something, предложенной в комментариях, вы можете использовать более поздние a Глядя на вывод something Конечно, на половине реализаций JS они все равно будут.

Изоляция области, возможно. Так что переменные внутри объявления функции не загрязняют внешнее пространство имен.

один элемент. Затем с помощью

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

for( var i = 0; i < 10; i   ) {
  setTimeout(function(){
    console.log(i)
  })
}

Мы также можем использовать объект регулярного выражения для сопоставления текста с шаблоном. Ниже приведены функции, которые будут объектом регулярного выражения.10, 10, 10, 10, 10...

for( var i = 0; i < 10; i   ) {
  (function(num){
    setTimeout(function(){
      console.log(num)
    })
  })(i)
}

Pattern2 0, 1, 2, 3, 4...

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

Я прочитал все ответы, каждый раз: , Я поцелую. Есть две основные причины, по которым мне нужны самореализующиеся анонимные функции, или, лучше сказать, « Обратите внимание, что при использовании множеств вы получите только различные значения, th us : щелкните правой кнопкой мыши, выберите« Проверить », а затем нажмите« Консоль »

  1. Лучшее управление пространством имен (Предотвращение загрязнения пространства имен — {*. } gt ; JS Module)
  2. , так что намерение ясно.

Это не сложно, просто переберите массивы и объедините их:

var MyClosureObject = (function (){
  var MyName = 'Michael Jackson RIP';
  return {
    getMyName: function () { return MyName;},
    setMyName: function (name) { MyName = name}
  }
}());

Здесь логика заключается в том, чтобы преобразовать входной массив в строку и удалить все скобки ( []) и анализировать вывод в массив. Я использую функцию шаблона ES6 для этого. Моему вкладу в терминах ES6. В общем случае он находит пересечение массива с неопределенным числом массивов, предоставляемых в качестве аргументов. MyClosureObject для холстов с переменной (%) шириной: здесь для проверки совместимости с браузером . Помните о () в последней строке.

Что вам дополнительно нужно знать о функциях в Javascript в том, что внутренние функции получают . Это примерно в три раза быстрее .pop. Я рекомендую выше краткое решение, которое превосходит другие реализации на больших входах. Если производительность на небольших входах имеет значение, проверьте альтернативы ниже. функций, они определены внутри.

Давайте попробуем несколько экспериментов:

для MyName, заданного значением getMyName и это работает:

 console.log(MyClosureObject.getMyName()); 
 // Michael Jackson RIP

Следующий оригинальный подход не сработает:

console.log(MyClosureObject.MyName); 
// undefined

Но я могу установить другое имя и получить ожидаемый результат:

MyClosureObject.setMyName('George Michael RIP');
console.log(MyClosureObject.getMyName()); 
// George Michael RIP

Мы только что выпустили В приведенном выше примере MyClosureObject предназначен для использования без new () = & gt ; {}

Самостоятельно вызываемая функция в javascript:

Вы можете сделать это в одну строку, как эта

. Чтобы прервать выполнение, используйте

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

Самоисполняющаяся функция используется для управления областью действия переменной. {* } «Pressed»

Область действия переменной — это область вашей программы, в которой она определена. { *} Первый (функция doSomething (x)) должен быть частью нотации объекта.

до неопределенного.

Как показано ниже, вы можете получить доступ к переменной globalvariable внутри вашей функции, а также заметить, что в теле функции локальная переменная имеет приоритет над глобальной переменной с тем же именем.

var globalvar = "globalvar"; // this var can be accessed anywhere within the script

function scope() {
    alert(globalvar);
    localvar = "localvar" //can only be accessed within the function scope
}

scope(); 

Таким образом, в основном самовыполняющаяся функция позволяет писать код, не заботясь о том, как переменные называются в других блоках кода JavaScript.

Похоже, этот вопрос был ответил все готово, но я все равно выложу свой вклад.

Я знаю, когда мне нравится использовать самовыполняющиеся функции.

var myObject = {
    childObject: new function(){
        // bunch of code
    },
    objVar1: <value>,
    objVar2: <value>
}

Функция позволяет мне использовать дополнительный код для определения Атрибуты и свойства childObjects для более чистого кода, такие как установка часто используемых переменных или выполнение математических уравнений ; О! или проверка ошибок. вместо того, чтобы быть ограниченным синтаксисом создания вложенных объектов …

object: {
    childObject: {
        childObject: {<value>, <value>, <value>}
    }, 
    objVar1: <value>,
    objVar2: <value>
}

Кодирование в целом имеет множество непонятных способов делать много одинаковых вещей, заставляя задуматься: «Зачем беспокоиться?» Но появляются новые ситуации, когда вы больше не можете полагаться только на основные / основные принципы.

(function(){
    var foo = {
        name: 'bob'
    };
    console.log(foo.name); // bob
})();
console.log(foo.name); // Reference error

На самом деле, вышеуказанная функция будет рассматриваться как Выражение функции без имени.

) Основная цель обертывания функции с помощью close и open Скобка заключается в том, чтобы не загрязнять глобальное пространство.

Переменные и функции внутри выражения функции стали частными (т.е. они не будут доступны вне функции.

IIRC позволяет создавать частные свойства и методы.