まずコードを見てみましょう
function show(){ alert(abc); } var abc="defg"; show();
C または Java プログラミングの経験がある人は、「このプログラムは機能しません。変数を参照する関数の後に変数が定義されています。ブラウザで実行すると、結果はどうなりますか?」と言うかもしれません。完璧に機能します!次に、何が起こっているのか、var を使用して定義された変数と var を使用せずに定義された変数の違いについて説明します。
1. 変数なし
簡単に言うと、変数を定義するときに var を省略するのは安全ではありませんが、合法です。このとき、変数がどこで定義されているかに関係なく、インタープリタは変数にグローバル スコープを与えます。
2. var
があります。安全かつ合法。定義された変数のスコープは、それが定義された場所によって異なります。具体的にどのようなスコープなのかについては、このブログの記事「JavaScriptのスコープ」を参照してください。
このようにして、冒頭の問題は解決できます。関数の内側にあるのは abc の定義ですが、値は未定義です。このとき、abc はグローバル スコープを持ち、関数の外側にあるのは abc の値を更新するだけです。