##グローバルスコープとスクリプトスコープ
let a = 0;
var b = 0;
function c() {}
debugger;
これらを定義し、ブラウザ上で検証をぶちかます。
(debuggerはブラウザを開いていると、この時点に達すると処理が止まる。)
検証のSources内、Command + R で更新。
Script
a: 0
Global Window
PERSISTENT: 1
TEMPORARY: 0
addEventListener: ƒ addEventListener()
alert: ƒ alert()
atob: ƒ atob()
b: 0
blur: ƒ blur()
btoa: ƒ btoa()
c: ƒ c()
Scope内にこのように表示された。
これがdebuggerから見える変数ということになる!
##グローバルスコープとは?
Sources内の結果からわかるように、VarやFunctionで定義した際は、Globalの Windowオプションにプロパティーとして保持される。
##スクリプトスコープとは?
letやconstにて宣言をとるとスクリプトの方に保持される
##windowオブジェクト自体がグローバルスコープ?
console.log(window.b);
を
console.log(b);と省略しても取得する値は変わらない。
ってことは、windowオブジェクト自体がグローバルスコープなんだ
なので
window.d = 1;
console.log(d);
すると、d = 1はグローバルスコープに追加されているので、コンソール上には1が表示される
使い勝手ではグローバルスコープもスクリプトスコープも変わらない
ただ、
window.d = 1;
let d = 2;
console.log(d);
とすると2が表示される。これはスコープチェーンによるもの!
##まとめ
一般的には、スクリプトスコープもグローバルスコープと呼ばれるとのこと。 ただ、スコープチェーンによる挙動の変化があるので、別のスコープであるという考え方は大切になる!