Вопрос по javascript – поддержание переменной в функции JavaScript
Я хочу разместить переменную в функции Эта переменная изменит состояние в зависимости от взаимодействия с пользователем
<code>function plan_state(current){ if (current != ''){ state = current; } else { return state; } } </code>
когда документ загружается, я вызываю plan_state («me»);
когда происходят определенные вещи, я могу позвонить plan_state («любимый»)
проблема, я запускаю функцию и хочу проверить текущее состояние ..
<code>alert(plan_state()); </code>
я получаю неопределенный ответ и, по крайней мере, должен быть «мной»; как я установил эту нагрузку.
Что я делаю неправильно?
определяя переменную внутри функции, либо как параметр, либо явно какvar
, он доступен только внутри функции. Чтобы достичь того, что вам нужно, вы можете реализовать переменную вне области действия, на более глобальном уровне (на самом деле не рекомендуется).
Однако после повторного прочтения вашего вопроса он немного пропущен. Вы не хотели бы вернутьсяstate
независимо отcurrent
? Я думаю, что вы можете после чего-то вроде этого:
var state;
function plan_state(current)
{
if (current != '' && current != state)
{
state = current;
}
return state;
}
Альтернативная структура объекта:
function StateManager(state)
{
this.state = state;
this.getState = function(current)
{
if (current != '' && current != this.state)
{
this.state = current;
}
return this.state;
}
}
// usage
var myStateManager = new StateManager("initial state here");
var theState = myStateManager.getState("some other state");
поскольку переменная состояния объявлена внутри функции и, следовательно, существует только в течение времени жизни вызова функции. Простым решением было бы объявить переменную глобально, вне функции. Этоплохой плохой плохой плохой.
Лучший подход заключается в использованиишаблон модуля, Это важный шаблон для изучения, если вы серьезно относитесь к разработке javascript. Он включает состояние с помощью внутренних (частных переменных) и предоставляет ряд методов или функций для изменения или получения состояния (например, объектно-ориентированное программирование).
var stateModule = (function () {
var state; // Private Variable
var pub = {};// public object - returned at end of module
pub.changeState = function (newstate) {
state = newstate;
};
pub.getState = function() {
return state;
}
return pub; // expose externally
}());
такstateModule.changeState("newstate");
устанавливает состояние
а такжеvar theState = stateModule.getState();
получает состояние
state
Error: User Rate Limit Exceeded