Почему JavaScript вызывает функцию, определенную внутри closour?
Я видел много js-фреймворков (включая jquery), использующих замыкание вокруг своей основной функции. Например,
var obj = (function(){
return {
test : function(){
alert('test');
}
}
})();
obj.test()
Источник jquery, http://code.jquery.com/jquery-1.7.2.js
Зачем нужно это дополнительное "закрытие" вокруг "функции"? Или какая разница, если мы используем его, как,
var obj = function(){
return {
test : function(){
alert('test');
}
}
}();
obj.test()
Оба имеют одинаковое поведение, и само определение функции помещает все локальные переменные в новую область видимости... так зачем дополнительное закрытие?
2 ответа
Он добавляет "большой" объект \ библиотечные функции, а не добавляет их в глобальный объект.
Вставленные вами два параметра аналогичны разнице между:
var foo = (2);
var foo = 2;
Нет разницы...
Обновить:
Теперь я понимаю ваш вопрос: скобки не создают новую область видимости в javascript, только функции.
Это просто соглашение, позволяющее легко отличать самовыполняющиеся функции от обычных функций.