变量更改和重置逻辑

时间:2011-06-28 04:52:27

标签: javascript

我注意到我在代码中做了很多这样的事情。

我需要存储变量的值,以便我可以更改它并再次恢复它。假设变量为var1。我需要使用同名var1下的变量,这意味着我需要直接对其进行值更改。但我不想失去原有的价值。所以我将它存储在var1_original某处,对其进行更改,运行我需要运行的代码,然后恢复原始值。

  var var1_original = var1;
  var1 = 'new value'; //I have to store the new value under the same name (var1) 

  //have some 
  //lines of code
  //here

  var1 = var1_original;

因此,我需要在许多变量(var1,color,dimArr等)上执行此操作,当然,在中间执行的代码也是不同的。有没有办法创建一个可以保存和恢复的函数,但仍然让代码在中间运行?

4 个答案:

答案 0 :(得分:1)

这可能不是您想要的答案,但您可以将内部块包装在匿名函数中:

var1 = "original value";
(function(var1) {
    var1 += "... another value";
})(var1);
var1; // "original value"

将内部块放入单独的变量作用域,并允许您重用var1变量名而不在外部块中更改它。如果您不需要从内部块中的原始值开始,则不需要将其传入 - 您可以使用var1语句将新var声明为新变量在内部区块。

答案 1 :(得分:1)

不确定我是否明白你的意思。我认为你不需要存储东西。您可以创建一个新变量并使用

var var1 = 'somevalue', var2 = 'anothervalue';
// do things using `var2`
// continue using 'var1'

或者,如果代码必须使用var1作为变量名,请使用立即调用的函数为其提供自己的范围:

var var1 = 'somevalue';
//...
(function(){
  var var1 = 'othervalue';
  // do things to var
}());
//...
//continue with original var1

答案 2 :(得分:1)

这是你能得到的最好的:

window.savedValues = {}
function cache(name, values) {
    if (typeof values == undefined) {
        return window.savedValues[name];
    } else {
        window.savedValues[name] = values;
    }
}

cache('foo', [var1, color, dimArr]);
// ...
var saved = cache('foo');
var1 = saved[0];
// ....

一些现代浏览器支持解构分配,这使得恢复部分更加方便:

[var1, color, dimArr] = cache('foo');

虽然我不禁觉得如果你首先需要这样的东西就会出现严重错误。

答案 3 :(得分:0)

您可能应该创建一个新变量,而不是重用旧变量。否则,如果相同的名称意味着同一个直线代码块中的不同内容,则可能会非常混乱。