スコープは「変数の有効範囲」のことと下記の著書では言及しています。またJavaScriptには以下のようなスコープが存在します。
・グローバルスコープ
・ローカルスコープ
・関数スコープ
・ブロックスコープ
またクラスに関係する変数もスコープに関連してきます。一般的に次のようなものがあります。
・インスタンス変数
・クラス変数
複雑なコードを書くようになると、スコープを小さくすることでバグの原因を減らしたりすることができます。
グローバルスコープ > クラス変数 > インスタンス変数 > 関数スコープ > ブロックスコープブロックスコープが変数の有効範囲が狭く、特別な意図がない場合には、なるべく使用したほうがいいです。
ブロックスコープ
ブロックとは{}で囲まれたコードを示します。constやletで宣言された定数や変数はこのブロックスコープで扱われます。
if(true)としているので、コンソールには’1:これがブロックスコープの変数です。’が表示されます。 if(false)とすると、’2:これもブロックスコープの変数です。’が表示されます。
関数スコープ
関数の中が変数の有効範囲になるスコープです。
グローバルスコープ
もっとも広いスコープで、プログラムのどこからでも参照できてしまいます。
関数に囲まれていない領域での変数を宣言したり、関数内でも変数を宣言する際にVarやconst,let付けずに使うと、それもグローバルスコープになります。
変数の巻き上げとブロックスコープ
これは同じ関数内で同名の変数を複数回宣言した場合、同一の変数として扱われることになります。
varで変数宣言した場合の動作を確認してみましょう。
varにてmyhoistingという変数が宣言されていますが、どちらもhoisting全体がスコープとなっていますので、同一の変数として扱われてしまいます。
最後のコンソールログでは’変更後’となってしまいます。
letやconstを利用すると最後のコンソールログで確認すると「変更前」となります。つまり「変数の巻き上げへの心配」をしなくて済むようになります。
等価演算子「==」と厳密等価演算子「===」
等価演算子「==」では文字列型の1と数値型の1とではtrueと評価されます。
しかし、厳密等価演算子「===」ではfalseと評価されます。
様々なロジックにて誤りを減らすためにもなるべく厳密等価演算子「===」で比較したほうがいいですね。
この本から引用、参考にして学び、完成させることができました。しかし、ここではプログラミング初心者の私が詳しく解説することは、おこがましく、難しく出来ません(ToT)
その点、この本では丁寧な解説が載っていますので、解説とともにコードを書き、完成させればより深く学ぶことができます(^.^)、実際、初心者の私でもわかりやすかったです。身に付け消えないスキルが3,000円弱ならコスパよく、買っておいてよかったと満足してます。