Я выполняю рефакторинг некоторого унаследованного кода, который использует шаблон раскрывающегося модуля, и есть экземпляры данных, хранящихся в модуле, на которые затем ссылаются позже в коде модуля. Кажется, что простое хранение данных в самом модуле в переменных было бы более распространенным и удобочитаемым подходом. Например, первый пример под функцией getPageLoadState
устанавливает глобальное свойство для объекта / модуля main
, к которому затем осуществляется доступ для определения логического значения. main.pageLoaded
таким образом предоставляется клиенту в глобальной области видимости, и я Я не уверен, каковы преимущества. Во втором примере функция getPageLoadState
удалена, и состояние полагается на переменную pageLoaded
, локальную по отношению к module
, чтобы определить, должны ли при выполнении loadData()
получить некоторые данные или нет.
Текущая настройка:
var main = (function() {
function init() {
loadData(); //loads data
loadData(); //does nothing
}
function getPageLoadState() { //exposes module.pageLoaded on first execution and returns boolean
if (main.pageLoaded !== undefined) { //main.pageLoaded has been set
return true;
}
main.pageLoaded = "true"; //set object 'pageLoaded' on main module to true on first execution of this function so subsequent runs will return true based in the if statement above
return false; //return false on initial execution
}
function loadData() {
var pageLoaded = getPageLoadState(); //returns false only on first execution
if (!pageLoaded) {
console.log("getting data");
}
}
return {
init: init
};
})();
main.init();//"getting data"
console.log(main.pageLoaded); //"true"
Как бы я это сделал:
var main = (function() {
var pageLoaded;
function init() {
loadData(); //loads data
loadData(); //does nothing
}
function loadData() {
if (!pageLoaded) { //condition is met only on first run of function when pageLoaded === undefined
console.log("getting data");
pageLoaded = true; //subsequent executions will not meet the if clause
}
}
return {
init: init
}
})();
main.init();//"getting data"