[JavaScript] var の代わりに let を使うべきか

function foo() {
  let x = 10;
  var z = 30;
  if (true) {
    let y = 20;
    var z = 40;
    console.log(x); // Output: 10
    console.log(y); // Output: 20
    console.log(z); // Output: 40
  }
  console.log(x); // Output: 10
//  console.log(y); // Uncaught ReferenceError: y is not defined
  console.log(z); // Output: 40
}

foo();

ChatGPTが吐き出したコードに少し手を加えたものだが、これ(変数z)を見てわかるように、var は入れ子で宣言できるくせに、関数スコープなので、内側ブロックでは上書き宣言になってしまう。こんなこと許されてよいのか?と思う人もいると思うが、関数スコープならその関数内で複数の宣言があったらエラーになって欲しいし、複数宣言できるならブロックスコープにして欲しい。ということから、let が追加された。

ざっくりと言えば、var の直感的ではないおかしな挙動をしないようにしたものがlet だとも言える。

なので、これからは、どう考えても let を使うべきで、var で無ければならない理由が見当たらない。のだが、まだ、var 派の開発者が少なからず居る。私はというと、let 派ではあるのだが、ついつい、癖でvar と書いてしまうヘボプログラマといったところだ。特に既存の var だらけの他人のプログラムをメンテナンスする時は、下手に let に変えたら、動かなくなるのではないかという恐怖心がわくこともある。動かなかったらほぼ元バグなのだが、めちゃくちゃ複雑怪奇なものだと、バグ取りをするのも面倒なので、var で逃げてしまうこともある。

大した使い分け的意味もなく、var と let が混在する状況も、あまりよくないとは思うということも、var を使いがちになる要因と言える。

カテゴリー: ZAKKI パーマリンク