Jmenuji se Dan, David je můj bratr ;). Nechci vás zklamat, ale to co píšete je hrubý omyl. Scope (pole působnosti, viditelnosti.. vida jak jsou ty překlady zrádné ;) generuje v Javasciptu pouze funkce. Mluvit o složených závorkách je zavádějící, generuje snad literální zápis objektu nějaký scope?
var object = {foo: 'bla'}; // hle, složené závorky, ale žádný scope ;)
Podívejte se na tento kód:
var a = function() {
document.title += 'a';
} ();
var b = (function() {
document.title += 'b';
})();
var c = new function() {
document.title += 'c';
};
Podstatné jsou ty kulaté závorky na konci (nebo operátor new ve třetím příkladě) Všechny příklady vytváří scope. Scope vytváří v Javascriptu funkce (nic jiného), a to pouze tak, že je funkce zavolána.
Jak vidíte, v prvním příkladu kulaté závorky nejsou, a stejně funguje. Nicméně, důrazně doporučuji závorky vždy psát, a to čistě proto, že takový kód je pak čitelnější. Už na začátku je vidět, že je funkce uzavřena do závorek, takže se s ní chystám asi něco dělat. Třetí příklad zmiňuji jen pro zajímavost, používá jej třeba Dean Edwards.
Pokud však funkci ničemu nepřiřazuji, tedy klasické:
(function() {
// ha, právě sem vytvořil nový scope
})()
Kulaté závorky kol funkce, jsou skutečně nutné, avšak pouze kvůli syntaxi. Samy o sobě scope nevytvářejí, ani funkci nevolají.