Stoyan Stefanov による Object-Oriented JavaScriptを使用して Javascript を学習しています。
彼は、グローバル スコープとローカル スコープを比較する例を示しています。
var a = 123;
function f() {
alert(a);
var a = 1;
alert(a);
}
f();
この例を見ると、最初のアラートが「123」で、2 番目のアラートが「1」であると予想しました。見よ、ストヤンは言う:
最初の alert() は 123 (グローバル変数 a の値) を表示し、2 番目は 1 (ローカル変数 a) を表示すると予想するかもしれません。これはそうではありません。最初のアラートは「未定義」と表示されます。これは、関数内ではローカル スコープがグローバル スコープよりも重要であるためです。したがって、ローカル変数は、同じ名前のグローバル変数を上書きします。最初の alert() の時点では、 a はまだ定義されていませんでしたが (したがって、値は定義されていません)、まだローカル空間に存在していました。
説明がわかりにくかったのですが、最初のアラートでローカル変数がグローバル変数をどのように上書きするのでしょうか? 他の/異なる説明をいただければ幸いです。