Categories: ZAKKI

[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 を使いがちになる要因と言える。

はじめ

Recent Posts

日米自動車貿易の“本当の不公平”

🔹【事実1】日本はアメリカ車に…

22時間 ago

NISAをあえて短期で使う:高齢者向け資産戦略の裏技

「NISAは長期保有が基本」「…

2か月 ago

モバイルバッテリーはケーブルレスの時代へ

今どきのスマートフォンはバッテ…

2か月 ago

老後資産の出口戦略:自分に合った“切り崩し方”を考える

~現金残高キープ型のゆるやかな…

2か月 ago