在javascript函数中保持变量存活

时间:2012-05-04 16:22:24

标签: javascript function variables call

我想在函数中存放一个变量 此变量将根据用户交互更改状态

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

当doc加载时我调用plan_state('me');

当某些事情发生时,我可以打电话给plan_state('喜欢')

问题,我运行一个函数,想要检查当前状态..

alert(plan_state());

我得到了未定义的,至少应该是'我',因为我设置了这个onload。

我做错了什么?

2 个答案:

答案 0 :(得分:45)

该函数不具有状态,因为状态变量在函数内声明,因此仅在函数调用的生命周期内存在。一个简单的解决方案是在函数外部全局声明变量。这是bad bad bad bad

更好的方法是使用module pattern。如果你认真对待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();获得状态

答案 1 :(得分: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");