【问题标题】:How to avoid resetting global variables in a js file如何避免在js文件中重置全局变量
【发布时间】:2014-10-23 16:40:54
【问题描述】:

我正在尝试在一个小型站点(少于 10 页)中将 localStorage 用于全局变量。我想在 js 文件中声明变量,但不要在每次页面加载时重置它们。

除了用另一个全局阻塞/重置之外,有没有办法防止重新加载几行?

/** placed in a sj file **/
if(localStorage['lock'] != '1') {
  localStorage['val1'] = '0';
  localStorage['val2'] = '0';
  localStorage['val3'] = '0';

  localStorage['lock'] = '1';
}

【问题讨论】:

  • localStorage 是一个永久 cookie,它不会在页面重新加载时停止,甚至在会话结束时也不会停止。
  • localStorage 中有一个条目告诉您它是否已初始化似乎是一个合理的解决方案。但是,您可以为此使用现有条目,例如if (localStorage.getItem('val1') != null)
  • 您可能不需要其他属性(并且可以使用localStorage.length 左右),但总的来说它是这样工作的,是的。不过,对每个属性进行存在性检查可能更方便。

标签: javascript html local-storage


【解决方案1】:

原生Local Storage 没有任何锁定能力。

你找到的解决方案对我来说很简洁。它的优点是速度快(因为它只检查一个键)。

但是,您可能希望在已完成的工作之上添加一个小层次的抽象。但这本质上是一个品味问题(这里对性能的影响很小)。

function freezeInLocalStorage(key, value) {
  if (typeof localStorage[key] !== 'string') {
    localStorage[key] = value;
  }
}

freezeInLocalStorage('val1', '0');
freezeInLocalStorage('val2', '0');
freezeInLocalStorage('val3', '0');

DEMO

【讨论】:

  • 如果空字符串是条目的可能值(空字符串是假的),这将不起作用。
  • 这个方法还是可以的,你只需要考虑所有可能的有效条目。
  • @JosephNeathawk:我们只需要检查字符串类型,因为 localStorage 在存储新值时会隐式转换。
  • 我的意思是,如果一个空字符串一开始就不是一个有效的条目,那么就不需要考虑它。您的更新会处理空字符串,但可能会出现空字符串应该被有效数据覆盖的情况,在这种情况下,您的原始代码会是更好的选择。也许将这两个选项都放在你的答案中......?
  • 我明白你的意思。不用说,它需要根据个人需要进行调整。这个版本更符合 OP 的问题,因为它只声明了一次密钥。
猜你喜欢
  • 2012-12-19
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2011-03-24
  • 1970-01-01
  • 2016-03-19
相关资源
最近更新 更多