なぜ timeoutId を別の関数内で使うことができるのですか?

timeoutId はすべての関数の外側で定義されているためです。
2022年7月15日
ユーザー

なぜ clearTimeout()timeoutId を渡すことができるんですか?
その答えはおそらくスコープの私の解釈が間違っていると思われるのでスコープのご教授お願いいたします。
私のスコープの解釈は...

  1. グローバル変数はどの関数内でも使える。
  2. ローカル変数はその関数内でしか使えない。

例:

let numbers;

function a(){
  numbers = 1;  //a()の中だけはnumbersは1として扱える。b()ではnumbersは1と表示されない 理由スコープが違うため
  console.log(numbers);
}

function b(){
  console.log(numbers); //undefinedになる。グローバルスコープのnumbersが初期化されていないので

}

もし上の認識があっていると仮定した場合今回のレッスン動画の私の疑問を上のコードに当てはめてみると

let numbers;
// let timeoutId;

function a(){
numbers = 1;
console.log(numbers);
// timeoutId = setTimeout(() => {
//   countUp();
// }, 10);
}

function b(){
  console.log(numbers);
// clearTimeout(timeoutId);
}

a();   // 1
b(); // undefinedになる

なぜ function a で代入された timeoutIdfunction b 内で使えるのですか?
なぜスコープが違うにも関わらずローカル変数が別のスコープで使えているんですか?
ご教授よろしくお願いいたします。

この回答を見るにはプレミアムサービスへの登録が必要です

プレミアムサービスとは?