"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が使われているため、入門書で「非推奨」と言われていたとしても、それはそれ、これはこれ。プロジェクトによって使い分けよう。
リンク