2

.jsファイルでグローバル変数を定義しています。:

関数にグローバル変数と同じ名前の引数がある場合、関数はグローバル変数を初期化できません。

var myvar;

function init(myvar){
    myvar= myvar;
}

しかし、グローバル変数と引数の名前が異なるように変数名を変更すると、関数はグローバル変数を初期化できます。

var myvar2;

function init(myvar){
    myvar2= myvar;
}

myvar2その後、正しく初期化されます)。

なぜそうなのですか?javascriptは、異なるスコープで同じ名前の2つの変数を許可しないため、変数のシャドウイングが発生していますか?

jsエンジンは、javaと同じ方法でメソッドスコープとグローバルスコープを区別できると思いました(このキーワードを使用していても)

4

1 に答える 1

6

それは正しいです; グローバル変数はシャドウイングされています。考えてみてください。この声明では:

myvar = myvar;

シャドウイングがなかった場合myvar、グローバルなものとローカルなものはどちらになりますか?

于 2013-01-28T18:29:44.113 に答える