我想知道javascript(如果可能)如何訪問與函數的變量輸入具有相同名稱的變量。函數變量和函數變量名稱相同。如何訪問?
function myfunc(var1)
{
var var1 = "World";
alert(var1);
}
我該如何判斷函數打印哪個var1?
我想知道javascript(如果可能)如何訪問與函數的變量輸入具有相同名稱的變量。函數變量和函數變量名稱相同。如何訪問?
function myfunc(var1)
{
var var1 = "World";
alert(var1);
}
我該如何判斷函數打印哪個var1?
NNNNNN是正確的,我測試了它。傳遞給函數的參數可以通過2種方式訪問,也可以通過其參數名稱和變量arguments
訪問。 arguments[0]
將是第一個參數的值。
在下面的示例中,您會期待2條警報,第一條指示"Hello"
,第二條指示"World"
。但他們都說"World"
證明賦值var1
實際上改變了傳遞給函數的參數的值。
function myfunc(var1) {
var var1 = "World";
alert(arguments[0]);
alert(var1);
}
myfunc("Hello");
實際上,在嚴格模式下(在JS 1.8.5中)'arguments'對象不應該通過對命名參數的更改來更新,所以在嚴格模式下您的示例應該說「你好」,「世界」,但我故意沒有在我的回答中提到,因爲我不想渾水或以任何方式鼓勵創建與函數參數同名的局部變量。另外(從我上次查看它的時候開始),一些聲稱支持嚴格模式的瀏覽器實際上並沒有實現這個規則。 – nnnnnn 2012-01-10 06:53:36
@nnnnnn我想知道如何做到這一點。我不是說我會的。我好奇。你能告訴我嗎? – 2012-01-10 13:10:40
nnnnnn說我提供的代碼示例將按照您預期的那樣工作,如果您在嚴格模式下運行JavaScript,您會在其中看到一條提示「Hello」,然後是「World」警報。至於你如何看待嚴格模式,你可以在這裏找到更多的信息:http://goo.gl/DbsKb - 就瀏覽器支持它的程度以及它們如何支持它而言,你必須研究它,或者找到通過試用了一個錯誤。 – 2012-01-10 18:32:29
那實際上並沒有定義第二個同名的變量。即使使用var
語句,您也只是覆蓋相同名稱的函數參數。
只給你的第二個變量一個獨特的名字。
(順便說一句,即使這實際工作也仍然是一個壞主意,因爲它會使你的代碼難以閱讀。)
如何使用唯一變量名稱代替? :-3 – deceze 2012-01-10 06:36:15
你爲什麼要使用同一個名字? – AmGates 2012-01-10 07:01:10
這僅僅是爲了一個問題的問題,這就是爲什麼第一個評論是無關緊要的,我希望我能回答第二個問題。 「我想知道的」應該澄清...... – 2012-01-10 13:05:59