2016-05-26 153 views
0

對不起,如果標題與我的問題不匹配,因爲我不能用單詞解釋它,但僅用一個例子。操作函數中的全局變量

這是一個非常簡單的例子,我的代碼是不一樣的和更長的時間:

var i=0; 
first(); 
function first() 
{ 
    i=1; 
    second(i); 
} 
function second(number) 
{ 
    number=2; 
} 

我試過這段代碼,它返回1

我想這裏是修改我的全局變量,對我的函數說第二個「嘿,你將永遠修改全局變量,但我通過你參考的是你必須修改的那個」

如果有人有答案,會很棒!他可以節省很多行:D

在此先感謝。

+0

它總是用'value' – Rayon

+0

難以理解通過。數字變量在哪裏定義?你要返回的變量是什麼? '我'還是'號碼'?爲什麼你在函數中重寫'number'作爲參數?我真的不明白你想要的成就。 –

回答

0

也許傳遞變數名稱作爲一個字符串解決您的問題...

var globalVar = 0; 
 

 
first(); 
 
function first() { 
 
    globalVar = 1; 
 
    changeGlobal('globalVar'); 
 
} 
 
function changeGlobal(v) { 
 
    window[v] = 2; 
 
} 
 

 
document.body.innerHTML = 'globalVar: '+globalVar;

+0

我試過你的代碼與https://jsfiddle.net,但我有1顯示,當我嘗試它與stackoverflow我有2 ...:/ –

+0

這可能是一個上下文問題...如果代碼運行在一個'frame' /'iframe'你可能需要檢查哪個'window'對象持有你的變量......也許試着用'top'替換'window'' – rafaelcastrocouto

+0

top不顯示任何內容。不知道是否需要信任jsfiddle ... –

0

原始值一樣整數由值在Javascript中過去了。這意味着first()將始終將i設置爲1. Second()基本上是no-op。

這應該實現你想什麼:

var i=0; 
first(); 
function first() 
{ 
    i=1; 
    i=second(i); 
} 
function second(number) 
{ 
    number=2; 
    return number; 
} 
+0

「second」的參數無用且令人困惑,然後 – floribon

+0

代碼只是一個示例。我不能在這個例子中返回數字,因爲在我編程的代碼中,我需要做一個.push()。 –

+0

如果你想改變一個全局,你可以改變global:function second(){i = 2}。或者你可以將我包裹在一個通過引用傳遞的對象中。作爲一個警告,讓全局變異的全局變量是一個非常糟糕的做法。 – simoraman