1

使用 JavaScript,是否可以将页面上的所有变量保存到本地存储,然后在页面刷新或重新加载时重新加载存储的变量?我正在尝试将变量保存到本地存储并在页面刷新时加载它们。这是我迄今为止尝试过的:

http://jsfiddle.net/jZVWk/1/

function saveAllVariables(){
    //save all variables on the page to local storage
}

function loadAllVariables(){
    //load all variables on the page from local storage, and re-create them using their original names
}

loadAllVariables(); //load all variables that were previously stored

if(typeof theName == "undefined"){
    var theName = prompt("Please enter your name:","Your name");
}

if(typeof currentTime == "undefined"){
    var currentTime = new Date();
}

document.body.innerHTML += "Time last visited: " + currentTime + "<br />";
document.body.innerHTML += "Your name : " + theName + "<br />";
var currentTime = new Date();
4

1 回答 1

1

有点。如果您关心的变量都是全局的,并且不依赖于任何非全局数据,您可以查看这个问题:Fetching all (javascript) global variables in a page (Thanks Stegrex)

但这还不是全部。在 JS 中,大量数据保存在隐藏范围内。这有两个问题:

  1. 对象可能无法从全局范围访问。
  2. 函数可能依赖于创建它们的范围内的数据,但不能从全局范围访问。

例如:

var globalThing = 'global';
var makeCounter = function() {
  var count = 0;
  return {
    increment: function() { count++; },
    getCount:  function() { return count; }
  }
}
var counter = makeCounter();
counter.increment();
alert(counter.getCount());

这段代码的状态现在不可能真正保存和重构。 count处于闭包中,在全局范围内隐藏且无法访问。如果没有更智能的方法来检查和保存对象的内部状态,您将无法保留此结构。


所以也许这不是你想要采取的方法。我敢打赌,有一种更清洁的方法可以做你想做的事。所以问题变成了:你为什么需要这个?你想做什么?

我强烈建议你明确地只保存你需要的数据,不要试图暴力保存整个宇宙。

在您的情况下,这很简单:

function saveOnlyImportantVaiables() {
  localStorage.theName = theName;
  localStorage.currentTime = currentTime;
}
于 2013-03-18T19:00:24.480 回答