非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Javascript】 letはverの置き換えだと勘違いしていたので違いについてメモ

   

いままでJavascriptをきちんと学んでいなくてネットの段弁的な情報から適当に扱ってきたのでいろいろ勘違いしているところはあります。その典型だったのがES6から推奨されている型宣言のletで、単純にvarの置き換えだと思っていました。しかし、実際はそうではなく例えばスコープの範囲が大きく異なり、これを理解していないと思わぬバグを生んでしまいます。

例えばこのコードですが、最初に宣言した変数aはif文中の変数aと同一のものと見なされます。なので最後に「2」が出力されるわけですね。

var a = 1;
if(true){
    var a = 2;
}
console.log(a); // => 2
 

 

ところが、letの場合はそれぞれ別物として扱われます。if文の中で新たに宣言した場合は別の変数です。最後の出力はあくまで「1」です。たぶんこの動きの方がC言語などの他の言語と同じなんじゃないかなと思います。

let a = 1;
if(true){
    let a = 2;
}
console.log(a); // => 1

 

以上のことからもvarを使い続けるのはちょっと危険ですね。今までどっちでもいいやと思っていましたが、コードの堅牢性を考えるとletを使っていくべきでしょう。

 

スポンサーリンク

 - HTML/JavaScript