Некоторое закрытие должно иметь дело с этим:
var foo = function() {
var a = 5;
var b = 6;
var c = a + b;
return {
a: a,
b: b,
c: c
}
}();
Все переменные, объявленные в foo
, являются закрытыми для foo
, как вы ожидали бы с любым объявлением функции и потому, что все они в области , все они имеют доступ друг к другу, не обращаясь к this
, как и ожидалось с помощью функции. Разница в том, что эта функция возвращает объект, который предоставляет частные переменные и назначает этот объект foo
. В конце вы возвращаете только интерфейс, который хотите выставить в качестве объекта с помощью оператора return {}
.
Затем функция выполняется в конце с помощью ()
, которая заставляет весь объект foo быть оценены, все переменные в экземпляре и объект возврата, добавленный как свойства foo()
.