在 JavaScript 函数中保持变量处于活动状态时出现问题
Problem keeping variable alive in a javascript function
我想在函数中容纳一个变量。此变量将根据用户交互更改状态。例如:
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");
相关文章:
- 在Angular 2中布线期间保持零部件处于活动状态
- 如何使bxslider仅在移动视图中处于活动状态
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 使用纯javascript而非jquery使所选选项卡处于活动状态并保持非活动状态
- 我如何为列出的选项卡元素编写一个Protractor测试,它会检查它是否's是否处于活动状态
- 返回上一页时,Javascript仍处于活动状态
- Angular+bootstrap ui,检查当前选项卡是否已处于活动状态
- React.js状态问题
- 按钮处于活动状态,焦点无法在Mac FireFox上工作
- 禁用永久活动状态
- 单击我网站中的链接时打开新选项卡,保持当前选项卡处于活动状态
- 网页在等待 AJAX 响应时变为非活动状态
- 广告拦截处于活动状态,然后不要打开超链接到新标签
- 如何创建至少 1 个框处于活动状态的复选框列表
- 如何使按钮具有 :活动状态 1 秒
- JQuery UI 1.11 将选项卡设置为活动状态
- 如何获取链接以保持活动状态
- 限制 .live() 函数在 JavaScript 中变为活动状态的次数
- 如何在每次页面重新加载时更改渐变背景,同时保持光标位置元素处于活动状态
- 在 JavaScript 函数中保持变量处于活动状态时出现问题