2014-01-13 153 views
0

我需要將對象傳遞給另一個函數,但是我在對象內部引用全局變量時遇到問題。對象中的Javascript變量

var a = 'first variable'; //SAMPLE GLOBAL VARIABLE 
var b = 'second variable'; //SAMPLE GLOBAL VARIABLE 

function iterator(options){ 
    for(var c in options){ 
    alert(c + ' ' + options[c]);  
    } 
} 

function main(){ 
    iterator({ 
     a:'5', 
     b:'6' 
    }); 
} 

的職能應警惕下面的輸出

first variable 5 
second variable 6 

但不是我越來越

a 5 
b 6 

我需要使用對象的內部變量。

+0

不要使用局部變量與全局相同的名稱,它看起來像你尋找麻煩,有大量的變量名稱,你可以使用。 – lastboy

+0

已更新但仍不起作用 – Kiel

+0

@Kiel現在檢查我的答案。 'alert(a +''+ options [c]); ' –

回答

2

根據你的行I need to use variables inside the object,我建議你如下重寫你main

function main(){ 
    var obj = {} 
    obj[a] = '5'; 
    obj[b] = '6'; 
    iterator(obj); 
} 

因爲,afor-in環路將內環創建新的變量,並參考對象

的每個鍵
+0

這一個作品謝謝你。我可能需要更改很多代碼lol – Kiel

+0

@Kiel:乾杯! :) – ram

+0

對於上面的問題,這裏是從@ ling.s單個js http://jsfiddle.net/nB5m3/2/的答案 – Kiel

0

var a這裏是專爲創建具有的功能範圍變量陰影全局變量:

function iterator(options){ 
    for(var a in options){ 
    alert(a + ' ' + options[a]);  
    } 
} 

你不能做到這一點,如果你仍然想訪問全局...

2

函數中的a是在for循環中聲明的局部變量。

var a = 'first variable'; //SAMPLE GLOBAL VARIABLE 
var b = 'second variable'; //SAMPLE GLOBAL VARIABLE 
var opts = {a: a, b: b}; 

function iterator(options){ 
    for(var a in options){ 
    alert(opts.a + ' ' + options[a]);  
    } 
} 
+0

抱歉,但全局變量opts不能全局,因爲我會傳遞對象到一個JavaScript庫。對不起,如果我沒有提到我認爲這不是一個因素。 – Kiel

+0

+1,好.. @基爾,這可能是答案 –

+0

沒有工作抱歉。這兩個函數實際上被分成2個JavaScript文件。從另一個JavaScript文件訪問全局變量opts的代碼將會有很多變化。但是,如果我只有一個文件這個工程。 – Kiel

1

您嘗試訪問的a & b綁定到Window對象。

否則,當您打印'a'或'b'時,它會從JSON的鍵/值打印鍵'a'。

$(window).load(function() { 
main(); 
}); 

,並

function iterator(options){ 
    for(var a in options){ 
    alert(window[a] + ' ' + options[a]);  
    } 
} 

Fiddle

+0

'window [a]'未定義 –

+0

你有沒有定義var a ='first variable';喜歡這個例子?這應該工作,我已經測試了自己。 – gauravmuk

+0

並在窗口加載完成後執行此操作,否則該變量可能在腳本實際執行之前未定義。 – gauravmuk

1

據編輯時,OP現在改變量名,所以現在變量可以直接訪問

function iterator(options){ 
for(var c in options){ 
    alert(a + ' ' + options[c]);  
} 
} 

這裏是Fiddle

+0

這適用於一個js文件。我需要在一個單獨的文件中的主要功能,這就是爲什麼我不能訪問全局變量a。我只是簡單地將js放在這裏,但函數迭代器所在的js文件實際上是在一個js庫中,我可以從主javascript訪問它。 – Kiel

+0

感謝和抱歉,如果我沒有提到js庫。 – Kiel