在 JavaScript 函数中保持变量处于活动状态时出现问题

Problem keeping variable alive in a javascript function

本文关键字:活动状态 问题 变量 函数 JavaScript      更新时间:2023-09-26

我想在函数中容纳一个变量。此变量将根据用户交互更改状态。例如:

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

当文档加载时,我调用plan_state('me'),当某些事情发生时,我可能会调用plan_state('loved')。当我运行函数并想要检查当前状态时,会出现此问题:

alert(plan_state());

我得到了undefined,但值应该是"我",因为我之前在文档加载时设置了此值。

我做错了什么?

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

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

我相信你的变量的作用域太"低"了;通过在函数中定义变量,无论是作为参数还是显式地定义为var,它只能在函数中访问。为了实现你所追求的,你可以在函数范围之外实现变量,在一个更全局的evel(实际上不推荐)。

但是,在重新阅读您的问题后,它有点误导。不管current如何,你都不想state回来吗?我想你可能会追求这样的事情:

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");