2011-06-28 37 views
0

我注意到我在代碼中做了很多。可變更改和重置邏輯

我需要存儲一個變量的值,以便我可以更改並重新恢復它。假設變量是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,顏色,dimArr等),當然是被中間執行不同的代碼。有沒有辦法創建一個可以保存和恢復的函數,但仍然讓代碼在中間運行?

回答

0

您應該製作一個新的變量,而不是重複使用舊的變量。否則,如果同一個名字在同一個直線代碼塊中代表不同的事物,它可能會變得非常混亂。

+0

中間的代碼特別使用名稱爲'var1'的變量。這是更改和重置的原因,不幸的是必須這樣做。 – sameold

+0

然後將中間的代碼移到一個單獨的函數中?或者更好的是在該塊中替換使用var1。 – Mikola

1

這可能不是你想要的答案,但你可以在一個匿名函數包裹內塊:

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

這使內塊到一個獨立的變量範圍,並允許您重用var1變量名稱,而不在外部塊中進行更改。如果您不需要以內部塊中的原始值開始,則不需要將其傳入 - 您可以在內部塊中聲明新的var1作爲新變量並使用var語句。

+0

這不是我要找的答案,但+1。 – sameold

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 
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]; 
// .... 

一些現代瀏覽器都支持解構assingments,這使得恢復部分更方便:

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

雖然我不禁覺得如果你首先需要這樣的東西,事情已經發生了可怕的錯誤。