Вопрос по javascript – поддержание переменной в функции JavaScript

14

Я хочу разместить переменную в функции Эта переменная изменит состояние в зависимости от взаимодействия с пользователем

<code>function plan_state(current){
    if (current != ''){
     state = current;
    }
    else {
     return state;
    }
}
</code>

когда документ загружается, я вызываю plan_state («me»);

когда происходят определенные вещи, я могу позвонить plan_state («любимый»)

проблема, я запускаю функцию и хочу проверить текущее состояние ..

<code>alert(plan_state());
</code>

я получаю неопределенный ответ и, по крайней мере, должен быть «мной»; как я установил эту нагрузку.

Что я делаю неправильно?

объявлено ли оно в функции onload, установив для него значение «me»? Daniel Hunter
где вы декларируете государство? Loktar

Ваш Ответ

2   ответа
1

определяя переменную внутри функции, либо как параметр, либо явно как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");
Error: User Rate Limit Exceeded Daniel Hunter
Error: User Rate Limit Exceeded Daniel Hunter
Error: User Rate Limit Exceeded
44

поскольку переменная состояния объявлена внутри функции и, следовательно, существует только в течение времени жизни вызова функции. Простым решением было бы объявить переменную глобально, вне функции. Этоплохой плохой плохой плохой.

Лучший подход заключается в использованиишаблон модуля, Это важный шаблон для изучения, если вы серьезно относитесь к разработке 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(); получает состояние

Error: User Rate Limit Exceeded Daniel Hunter
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Daniel Hunter
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededthisError: User Rate Limit ExceededstateError: User Rate Limit Exceeded

Похожие вопросы