スコープとは?
スコープとは、変数の適用範囲(使える範囲)を示す概念です。
大きく分けて2種類のスコープがあります。
- グローバルスコープ
- ローカルスコープ(ブロックスコープ・関数スコープ)
以下がざっくりとした図解です。1つ1つ説明していきます。

グローバルスコープ
グローバルスコープとは、プログラムの全範囲を示します。
基本的にどんな変数がグローバルスコープを持つかというと、関数や{}の中にない変数です。
枠組みに囚われていないため、プログラム全体のどこでも使用することができます。
ローカルスコープ
グローバルスコープとは対照的に、ローカルスコープはプログラム内のある範囲です。
定義した変数がローカルスコープを持つかどうかは、var, let, const の何で定義するかによって異なります。それについては、「【JavaScript】var, let, const の違い・使い分け」で詳しく説明しておりますので、気になる方はご覧ください。
また、ローカルスコープは更に2つに分けられます。
ブロックスコープ
{}で囲まれた範囲のことです。イメージはこんな感じです。

関数スコープ
関数内の範囲です。関数の{}に囲まれているところです。

まとめ
さて、最初に挙げた画像の再掲です。
変数 a は、グローバルスコープを持ち、b はブロックスコープを持つとともに、c は関数スコープを持っているのがわかるかと思います。

各スコープについては以上です。
宣言の仕方によって、変数のスコープは変わるので気になる方はこちらもどうぞ。