Неловкий способ выполнения кода JavaScript
В учебнике Google для внедрения входа в Google+ в приложении Flask я обнаружил, что разработчик часто использует неудобный способ выполнения кода JavaScript:
Вместо того, чтобы делать
var a = foo(bar);
Я вижу это:
var a = (function() {
return foo(bar);
})();
В чем причина этого странного способа?
Ответы
Ответ 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
Функция закрытия используется для инкапсуляции некоторых атрибутов/методов в функцию. Во многом как частный/общественный принцип с других языков.
Дополнительную информацию можно найти в этом разделе здесь в разделе "Структура модуля"