2012-01-10 96 views
0

我想知道javascript(如果可能)如何訪問與函數的變量輸入具有相同名稱的變量。函數變量和函數變量名稱相同。如何訪問?

function myfunc(var1) 
{ 
    var var1 = "World"; 
    alert(var1); 
} 

我該如何判斷函數打印哪個var1?

+3

如何使用唯一變量名稱代替? :-3 – deceze 2012-01-10 06:36:15

+2

你爲什麼要使用同一個名字? – AmGates 2012-01-10 07:01:10

+0

這僅僅是爲了一個問題的問題,這就是爲什麼第一個評論是無關緊要的,我希望我能回答第二個問題。 「我想知道的」應該澄清...... – 2012-01-10 13:05:59

回答

3

NNNNNN是正確的,我測試了它。傳遞給函數的參數可以通過2種方式訪問​​,也可以通過其參數名稱和變量arguments訪問。 arguments[0]將是第一個參數的值。

在下面的示例中,您會期待2條警報,第一條指示"Hello",第二條指示"World"。但他們都說"World"證明賦值var1實際上改變了傳遞給函數的參數的值。

function myfunc(var1) { 
    var var1 = "World"; 
    alert(arguments[0]); 
    alert(var1); 
} 

myfunc("Hello"); 
+1

實際上,在嚴格模式下(在JS 1.8.5中)'arguments'對象不應該通過對命名參數的更改來更新,所以在嚴格模式下您的示例應該說「你好」,「世界」,但我故意沒有在我的回答中提到,因爲我不想渾水或以任何方式鼓勵創建與函數參數同名的局部變量。另外(從我上次查看它的時候開始),一些聲稱支持嚴格模式的瀏覽器實際上並沒有實現這個規則。 – nnnnnn 2012-01-10 06:53:36

+0

@nnnnnn我想知道如何做到這一點。我不是說我會的。我好奇。你能告訴我嗎? – 2012-01-10 13:10:40

+0

nnnnnn說我提供的代碼示例將按照您預期的那樣工作,如果您在嚴格模式下運行JavaScript,您會在其中看到一條提示「Hello」,然後是「World」警報。至於你如何看待嚴格模式,你可以在這裏找到更多的信息:http://goo.gl/DbsKb - 就瀏覽器支持它的程度以及它們如何支持它而言,你必須研究它,或者找到通過試用了一個錯誤。 – 2012-01-10 18:32:29

6

那實際上並沒有定義第二個同名的變量。即使使用var語句,您也只是覆蓋相同名稱的函數參數。

只給你的第二個變量一個獨特的名字。

(順便說一句,即使這實際工作也仍然是一個主意,因爲它會使你的代碼難以閱讀。)