結論
個人的に今後letかconstだけにしときます。
「var」に関してはvarをそのまま使わないといけない場合だけvarを使います。パッと思い浮かぶのはライブラリとかですかね。letかconstに統一したいけど、コードが多い場合はそのまま使用すると思います。
変数にはリテラル、オブジェクト、配列、関数などいろいろ格納できます。「名札付け」のイメージでしょうか?昔は「箱」イメージがよく使われていましたが、最近は変数を説明するときには「名前付けイメージ」が使われるようです。何かしらの都合が悪くなったのでしょうかね?
let
再宣言不可。
再代入可能。
私みたいな少ないコード量を書く場合はあまり気にしないかもです。変数名が重複するとエラーが起こります。
const
再宣言不可。
再代入不可。
実質、定数?という情報もちらほら見ますが変数です。
例
let x = 123
x = "abc" //これはOK
let y = 123
let y = "abc" //これはエラーが出ます
/*
SyntaxError: Identifier 'y' has already been declared
*/