我注意到我在代码中做了很多这样的事情。
我需要存储变量的值,以便我可以更改它并再次恢复它。假设变量为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等)上执行此操作,当然,在中间执行的代码也是不同的。有没有办法创建一个可以保存和恢复的函数,但仍然让代码在中间运行?
答案 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)
您可能应该创建一个新变量,而不是重用旧变量。否则,如果相同的名称意味着同一个直线代码块中的不同内容,则可能会非常混乱。