Подтвердить что ты не робот

Сохранение переменной в функции javascript

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

function plan_state(current){
    if (current != ''){
     state = current;
    }
    else {
     return state;
    }
}

когда doc загружается, я вызываю plan_state ('me');

Когда случаются некоторые вещи, я могу назвать plan_state ( "любимый" )

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

alert(plan_state());

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Я считаю, что объем вашей переменной слишком "низкий"; определяя переменную внутри функции, либо как параметр, либо явно как 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");