2013-02-07 40 views
0

好吧,我不知道我是否能夠充分描述我正在做的事情的範圍,但希望我可以在這裏傳達一定的級別,並希望有人會理解。所以..變量再次作爲參數傳遞迴變量

我有我在我的JavaScript即定義這些全局變量:

var abc = ''; 
var def = ''; 
var ghi = ''; 

這些變量我能在我的腳本通過功能以後定義它們。所以他們以後可以重用其他函數。那部分我沒有問題。現在我有一個有趣的概念,讓我難住了。變量是這種情況最終是我從函數傳遞給函數的對象,可以用於各種比較,並根據需要進行更新。現在我已經達到了需要在特定函數結束時重新定義整個對象的點。但是我只是繞過物體本身,所以參考失去了以哪個物體爲起點。

所以現在我想弄清楚有沒有辦法,我可以重新定義它,說我的功能是

function monkey(var) 
{ 
    //code to do stuff 
    //something here after stuff to redefine var as the object it once was referenced 
    //example ghi = something_from_code_generation_above 
} 
monkey(abc); 
monkey(def); 
monkey(ghi); 

其中生成類似農行對象更新,或DEF對象更新,或來電之後ghi對象更新。但保持它的功能範圍內,而不是通過像

ghi = monkey(ghi); 
+0

爲什麼標記爲JSON? –

回答

1

我知道如何做到這一點的唯一方法是通過將封閉的範圍作爲一個額外的參數,並傳遞,而不是一個封閉限制的變量。

monkey(window, "abc"); // sends the global variable "abc" and allows it to be modified 

function monkey(scope, name) 
{ 
    var v = scope[name]; 
    // do stuff to v 
    scope[name] = whatever; // destructively updates the variable in the original scope 
} 

如果你已經知道,通過將特定範圍內的所有變量(例如,他們是一些已知的命名對象的一部分),你只需通過傳遞字符串變量名。

如果他們所有的全局變量,因爲你在你的問題表明,這樣做:

monkey("abc"); // instead of monkey(abc); 
function monkey(name) 
{ 
    var v = window[name]; 
    window[name] = whatever; // updates the global variable by name 
} 
+0

正在尋找'window [name]'邏輯。我知道這是一些沒有意識到「窗口」必須在那裏的東西。非常感謝,你給我留下了一個頭痛的世界 – chris

0

不知道這是你想要達到的目標。

function monkey(my_var) 
{ 
    console.log('Im ', my_var.id); 
} 
abc = {id: 'abv'}; 
def = {id: 'def'};