Подтвердить что ты не робот

Неловкий способ выполнения кода JavaScript

В учебнике Google для внедрения входа в Google+ в приложении Flask я обнаружил, что разработчик часто использует неудобный способ выполнения кода JavaScript:

Вместо того, чтобы делать

var a = foo(bar);

Я вижу это:

var a = (function() {
  return foo(bar);
})();

В чем причина этого странного способа?

4b9b3361

Ответ 1

Это плохой пример. Рассмотрим следующее:

var a = (function(){
    var ret = {};
    ret.test = "123";
    function imPrivate() { /* ... */ }
    ret.public = function() { imPrivate(); }
    return ret;
})();

a будет содержать varible test и функцию public, однако вы не можете получить доступ к imPrivate. Это обычный способ обработки открытых переменных vs private;

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

Ответ 2

var a = (function() {
  return foo(bar);
})();

В этом случае это действительно не нужно, но это не так, и это не вызовет ошибки.

Но IIF несколько раз использует как module pattern:

var a = (function() {
  /* some other code in own scope */
  return foo(bar);
})();

В этом случае IIF является просто a module, который экспортирует что-то снаружи.

Ответ 3

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

Дополнительную информацию можно найти в этом разделе здесь в разделе "Структура модуля"