JavaScriptにおける関数の外部変数へのアクセス

次のコードを見てみましょう:

javascriptlet num = 1; // 変数に値を設定する

function func() {
  console.log(num); // コンソールに出力する
}

func(); // 関数を呼び出す

以前にも述べたように、変数の値は関数の定義より前に ある必要は必ずしもありません。 重要なのは、関数の呼び出しより前にあることです:

javascriptfunction func() {
  console.log(num);
}

let num = 1;
func();

実はこれは完全に正確ではありません。私たちの関数は 呼び出される前から変数numの値を知っています:

javascriptlet num = 1;

function func() {
  console.log(num); // 関数はすでに num = 1 であることを知っている
}

もう少し複雑な例です:

javascriptlet num = 1; // この時点で関数は num = 1 を知る

function func() {
  console.log(num);
}

num = 2; // この時点で関数は num = 2 を知る

関数の呼び出しを追加してみましょう:

javascriptlet num = 1; // この時点で関数は num = 1 を知る
func(); // 1を出力する

function func() {
  console.log(num);
}

func(); // 1を出力する
num = 2; // この時点で関数は num = 2 を知る
func(); // 2を出力する

もう一度言います:実際には、関数は呼び出されていなくても 外部変数の値を知っています。