2012-01-10 15 views
0

私は、javascript(可能であれば)が関数の変数入力と同じ名前の変数にどのようにアクセスするのだろうと思っていました。関数の変数と関数の変数に同じ名前があります。アクセスするには?

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

どのようにvar1を印刷するのかを教えてください。

+3

代わりにユニークな変数名を使用することはどうですか? :-3 – deceze

+2

なぜ同じ名前を使用しますか? – AmGates

+0

最初のコメントは無関係で、私は2番目のコメントに答えることを願っています。 .......... –

答えて

3

NNNNNNは正しいですが、私はそれをテストしました。関数に渡される引数は、パラメータ名とarguments変数によって2通りの方法でアクセスできます。 arguments[0]は最初のパラメータの値になります。

以下の例では、2つのアラートが表示されます。最初のアラートは"Hello"で、2番目のアラートは"World"です。しかし、彼らはどちらも、var1を代入すると、関数に渡される引数の値が実際に変更されることを証明すると、"World"と言います。

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

myfunc("Hello"); 
+1

実際に厳密なモード(JS 1.8.5)では、 'arguments'オブジェクトは名前付きパラメータの変更によって更新されるはずではないので、strictモードでは「こんにちは」「世界」と言わなければなりませんが、私は水域に泥をかぶったり、関数の引数と同じ名前のローカル変数の作成を奨励​​したくないので、意図的に言及しませんでした。また、(私が最後に調べた時点で)厳密モードをサポートすると主張していたブラウザの中には、このルールを実際に実装していないものもありました。 – nnnnnn

+0

@nnnnnnどうすればいいのか教えてください。私は私が言っているわけではない。気になります。あなたは私を見せてくれますか? –

+0

nnnnnnは、厳密なモードでJavaScriptを実行する場合、「Hello」という警告が表示され、「World」というアラートが表示される場所で、私が提供したコードサンプルが正常に動作すると言っています。厳密なモードでの表示方法については、http://goo.gl/DbsKbを参照してください。ブラウザがどのようなサポートを提供していますか、それをどの程度サポートしているかを調べるか、見つけ出す必要がありますトライアルでエラーを出します。 –

6

実際には同じ名前の2番目の変数は定義されていません。 varステートメントでも、同じ名前の関数パラメーターを上書きしています。

2番目の変数には一意の名前を付けます。

は(ちなみに、これは実際に働いていた場合でも、まだそれが読みあなたのコードがハードになるだろうので 悪いアイデアだろう。)

関連する問題