1. ホーム
  2. javascript

[解決済み] JavaScriptのローカル変数とグローバル変数の混乱 [duplicate]

2022-12-27 19:01:26

質問

私はJavaScriptの初心者で、ローカル変数とグローバル変数のスコープについていくつかの練習をしていました。以下は私のコードです( フィドル ):

var myname = "initial"
function c(){
    alert(myname);
    var myname = "changed";
    alert(myname);
}
c();

最初のアラートが呼び出されたとき、表示されているのは myname を未定義として表示しています。そこで私が混乱しているのは、グローバルなインスタンスである myname のグローバルインスタンスにアクセスできないこと、そして、もし私が myname を関数内で定義しなければ、うまくいきます。

どのように解決するのですか?

JavaScriptでは、変数宣言は自動的に関数の先頭に移動します。そのため、インタプリタでは次のように表示されます。

var myname = "initial"
function c(){
    var myname;
    // Alerts undefined
    alert(myname);
    myname = "changed";
    // Alerts changed
    alert(myname);
}
c();

これは 吊り上げ .

ホイスティングと、変数のスコープが宣言された関数であるという事実のため、この混乱を避けるために、関数の先頭にすべての変数をリストするのが標準的なやり方です。