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。