Если вызываем (function(){})() , то создаем замыкание, переменные которого доступны будут только в нем
и больше нигде, если вызывать (function(){}()), то можно запузырить туда еще других функций
(function(){},function(){},function(){}, ...) для которых внутренние переменные, принадлежащие
замыканию будут тоже доступны.
Например вы хотите, чтобы счетчик кликов работал только от кликов и нигде в коде не было доступа к нему,
тогда вешаете функцию на обработчик события следующим образом:
document.addEventListener("click" ,(function(){var numClicks = 0; return function(){alert(++numClicks)};})(), false)