如何避免重置js文件中的全局变量
我想在一个小站点(小于10页)中使用localStorage作为全局变量。我想在js文件中声明变量,但不要在每次加载页面时重置它们。如何避免重置js文件中的全局变量
有没有一种方法可以防止重新加载几行,而不仅仅是阻止/重置另一个全局?
/** placed in a sj file **/
if(localStorage['lock'] != '1') {
localStorage['val1'] = '0';
localStorage['val2'] = '0';
localStorage['val3'] = '0';
localStorage['lock'] = '1';
}
原生Local Storage没有任何锁定可变性。
您发现的解决方案对我来说很整洁。它的优点是快速(因为它只检查一个键)。
但是,您可能希望在已完成的顶部添加一个小级别的抽象。但这基本上是品味的问题(这里的性能影响很小)。
function freezeInLocalStorage(key, value) {
if (typeof localStorage[key] !== 'string') {
localStorage[key] = value;
}
}
freezeInLocalStorage('val1', '0');
freezeInLocalStorage('val2', '0');
freezeInLocalStorage('val3', '0');
如果空字符串是条目的可能值(空字符串是虚假的),这将不起作用。 – 2014-08-29 16:22:10
这种方法仍然可以工作,你只需要考虑所有可能的有效条目。 – KnightHawk 2014-08-29 16:24:06
@FelixKling:好点。固定。 – aymericbeaumet 2014-08-29 16:24:57
'localStorage'是不停留在一个页面重载,或在会话结束,即使一个永久性的Cookie。 – Zak 2014-08-29 16:18:23
在'localStorage'中有一个条目,告诉你它是否被初始化似乎是一个合理的解决方案。但是,您可以使用现有的条目,例如'if(localStorage.getItem('val1')!= null)' – 2014-08-29 16:19:22
您可能不需要其他属性(并且可以使用'localStorage.length'左右),但通常情况下这是如何工作的。不过,对每个物业进行存在检查可能会更方便。 – Bergi 2014-08-29 16:22:24