Lv1プログラマの誰得メモ

総務女子の趣味とか勉強に関係することのメモ

【javaScript】入門書から"var"の気配が消えた

"var"は非推奨

遥かむかし、10年ほど前、javaScriptをかじってたときは、変数宣言といえば”var”だった。ところが、改めて勉強しようと買った書籍「javaScript基礎入門」にはこう書いてある。

varによる変数定義だとスコープが大きくなり、予期せぬ場所で目的の変数を上書きするバグの原因になります。特段の理由がなければ利用しない方がいいでしょう。

書籍冒頭から頑なに変数定義をletで行っていて「varはどうなった?」と思っていたので、この注意書きを読んで椅子から転げ落ちる気持ちだった。(letは新しい変数定義なんだなー程度に思っていた) そしてこの注意書き以降、この書籍からvarの気配は消えた。

変数宣言"var"と"let"の違いは「スコープ」

varとletではアクセスできる範囲(スコープ)が異なる。
letブロックスコープblock scope)。つまり、letで宣言された変数にアクセスできるのは、宣言されたブロック(開きカッコと閉じカッコ)の内側のみになる。

function sample() {
  if (true) {
    let hoge = 'hoge';
    console.log(hoge);    // "hoge"が出力される
  }
  console.log(hoge);      // エラーになる。hoge が宣言されたif 文の外側でhoge を参照。
}

var関数スコープfunction scope)。つまり、varで宣言された変数には、宣言されたfunction内ならどこからでもアクセスできる。

function sample() {
  if (true) {
    var fuga = 'fuga';
    console.log(fuga);    // "fuga"が出力される
  }
  console.log(fuga);      //  "fuga"が出力される。宣言されたif 文の外側でもfuga参照可能。
}

"let”はES6(ES2015)から登場

"let”は"var"と同じ時代から存在するのではなく、ES6(ES2015)というバージョンからの登場。ブラウザによっては未対応だったりする。(といってもIE11かー) developer.mozilla.org

"var"は非推奨、とはいえ

実際の業務ではまだまだvarが使われているため、入門書で「非推奨」と言われていたとしても、それはそれ、これはこれ。プロジェクトによって使い分けよう。