В случае конкатенации кода из нескольких файлов сборщиками, в которых это может привести к ошибке в результирующем коде. Конкретно в данном премере - функция бессмысленна т.к. вызвать ее нельзя.
скобки делают все локальным, никакого перекрытия переменных с другими модулями, считайте что там внутри собственное пространство имен и наружу ничего не попадет
Виталий: там пропущен вызов, т.к. без вызова это бесполезная функция. Она объявится и ее уже никак не используешь.
А у вас бред, т.к. не скобки создают область видимости, а функция.
скобки делают все локальным, никакого перекрытия переменных с другими модулями, считайте что там внутри собственное пространство имен и наружу ничего не попадет
- это бред, скобки вообще никакого отношения к области видимости не имеют. Области видимости создаются функциями.
Здесь скобки указывают интерпретатору, что function обозначает не Function Declaration, а Function Expression, так как внутри скобок может быть только выражение.
я возможно не совсем правильно высказался, но я имел ввиду то, что из модуля мы отдаем наружу только то, что отдаем, в отличии от функции конструктора объекта, которая даже приватные свойства вытаскивает наружу.
да возможно г с пальцем сравниваю, но логика в этом есть, модуль запирает внутри себя ту часть данных, которую мы не отдаем наружу. Если воспринимать ()() только как запуск анонимной функции то да, мои умозаключения лишние, однако, я воспринимаю эту конструкцию ;()() как модуль , потому и пишу о том, что он публикует......
function a(){
this.priv = function(){
console.log('приватное');
};
}
let b = (function(){
function big(){
console.log('big');
}
function a(){
console.log('публичное');
}
function b(){
console.log('приватное');
}
big.a = a;
window.big = big;
})();
big.a(); // -> публичное
new a().priv(); // -> приватное Хотя я типо надеялся на приватность
big.b(); // Uncaught TypeError: big.b is not a function