2

次のコードを試しました:

var a = 5;

function x() {
  console.log(a);
}

x();

期待どおりに実行され、5 が出力されます。

しかし、コードを変更して、グローバル変数 a が次のように上書きされるようにしました。

var a = 5;

function x() {
  console.log(a);
  var a = 1;
}

x();

undefined と表示されます。上書きは console.log(a) の直後に行う必要があるため、私には意味がありません。それで、問題は何ですか?

4

2 に答える 2

5

これは、2 番目aの変数が関数の一番上に「巻き上げ」られており、最初の変数が隠されているために発生していaます。実際に起こっていることは次のとおりです。

var a = 5;

function x() {
  var a;
  console.log(a);
  a = 1;
}

x();

これは、この件についてさらに読むための十分に良いからの巻き上げに関する記事です。

于 2013-03-30T03:48:46.430 に答える