Рассмотрим следующие две функции,Почему (function() {...}()) создает состояние «singleton»?
// function
var returnObject = function() {
var values = [];
return {
sum: function(addend) {
var toReturn = 0;
if (addend) {
values.push(addend);
}
values.forEach(function(el) {
toReturn += el;
});
return toReturn;
}
}
};
// immediately executed function
var returnImmediatelyExecutedFunction = (function() {
var values = [];
return {
sum: function(addend) {
var toReturn = 0;
if (addend) {
values.push(addend);
}
values.forEach(function(el) {
toReturn += el;
});
return toReturn;
}
}
}());
Я имеющий "eeeergh! Мозг!" момент на этот момент об этом, но я не понимаю, почему returnObject
возвращает уникальное состояние закрытия каждый раз, когда оно используется, но returnImmediatelyExecutedFunction
возвращает то же состояние.
Рассмотрим вывод из следующих действий:
var summer1 = returnImmediatelyExecutedFunction;
summer1.sum(2);
summer1.sum(4);
summer1.sum(8);
console.log(summer1.sum());
var summer2 = returnImmediatelyExecutedFunction;
summer2.sum(2);
summer2.sum(4);
summer2.sum(8);
console.log(summer2.sum());
var summer3 = returnObject();
summer3.sum(2);
summer3.sum(4);
summer3.sum(8);
console.log(summer3.sum());
var summer4 = returnObject();
summer4.sum(2);
summer4.sum(4);
summer4.sum(8);
console.log(summer4.sum());
Выход:
14
28 // why not 14?
14
14