Javascript 变量更改和重置逻辑

Javascript 变量更改和重置逻辑,javascript,Javascript,我注意到我在代码中经常这样做 我需要存储一个变量的值,这样我就可以更改它并再次恢复它。假设变量是var1。我需要使用名称相同的变量var1,这意味着我需要直接对其进行值更改。但我不想失去最初的价值。因此,我将它存储在某个地方var1_original,对其进行更改,运行需要运行的代码,然后恢复原始值 var var1_original = var1; var1 = 'new value'; //I have to store the new value under the same na

我注意到我在代码中经常这样做

我需要存储一个变量的值,这样我就可以更改它并再次恢复它。假设变量是
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、颜色、DIMAR等)上这样做,当然在中间执行的代码是不同的。有没有办法创建一个可以保存和恢复的函数,但还是让中间的代码?

你应该做一个新的变量,而不是重用旧的变量。否则,如果同一个名称在同一直线代码块中表示不同的内容,则可能会非常混乱。

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

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

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

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

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

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

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

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

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

不知道我是否明白你的意思。我想你不需要储存东西。您可以创建一个新变量并使用它

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

这是您通常能得到的最好结果:

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');

虽然我忍不住觉得,如果你一开始就需要这样的东西,那么事情就糟透了。

这是你通常能得到的最好的东西:

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');

但是,如果你首先需要这样的东西,我就忍不住觉得有什么东西出错了。

中间的代码是用一个变量来命名的。这是改变和重置的原因,不幸的是必须这样做。然后将中间的代码移到一个单独的函数中。或者更好地替换在该块中使用VAR1。中间的代码使用变量名“代码> VAR1”。这是改变和重置的原因,不幸的是必须这样做。然后将中间的代码移到一个单独的函数中。或者更好的方法是在该块中替换var1。这不是我要寻找的答案,但仍然是+1。这不是我要寻找的答案,但仍然是+1。