Вы также можете решить эту проблему другим способом, понимая области действия переменных и функций.
Когда вы возвращаете конструктор объекта { curRow: curRow ... }
, он просто инициализирует член объекта с именем curRow
для значение переменной curRow
в области действия анонимной функции;он не создает постоянной связи между ними.
Как только анонимная функция возвращается, вызов designs.setCurRow
обновляет переменную curRow
в этой области в точности так, как вы ожидаете, но эта переменная теперь полностью недоступна длявнешний мир - между ним и элементом curRow
конструкций нет никакой связи.
Вы можете решить эту проблему, применив метод setCurRow
к this.curRow
, как и в других решениях.В этом случае вам не нужно делать curRow
переменной в исходной области видимости, поскольку она полностью не используется.Другое решение - добавить метод getter к текущему:
var designs = (function() {
var curRow,
setCurRow = function(val) {
curRow = val;
},
getCurRow = function() {
return curRow;
},
initTable = function() {
setCurRow(0);
};
return {
getCurRow : getCurRow,
setCurRow : setCurRow,
initTable : initTable
};
}) ();
designs.initTable();
designs.setCurRow(someNewVal);
console.log(designs.getCurRow());
Поскольку getCurRow
и setCurRow
являются функциями , которые закрыты в области видимости, содержащей переменнуюvarRow
, они могут вернуться в эту область видимости и получить доступ и изменить переменные, которые доступны только внутри нее.
В этом случае сделать curRow
членом возвращаемого вами объекта, вероятно, проще, но другойСпособ также полезен, так как вы можете использовать его для эффективного создания закрытых членов и методов .