まず、両者の特徴をまとめてください:
let と const: let と const で宣言された変数には、変数のリフティングはありません。
あるスコープで宣言されていない変数を使いたい場合、まず親スコープでその変数を探し、あれば親を使います。定義されていない場合はエラーとなります。
このスコープに定義があっても、宣言が参照の後に来る場合もエラーになります。この期間は文法的には「一時的なデッドゾーン」と呼ばれます。
Var:varは変数を昇格させるために存在し、もし間違った方法で宣言された場合、あなたが注意を払わなければ、あなたの代わりにグローバル変数に昇格させてしまいます。
二人の関係については、これまで理解できなかった人たちにも理解しやすいように、物語という形で説明します:
当初、フロントエンドの世界は、誰もがやるべきことをやり、ただ進化していくだけの、特徴のない世界でした。ある日、一人の男が、ページ上の何かを動的に変更できるものを、それが最初に書かれたものであろうとなかろうと、作り出したのです。何かを手に入れたのなら、それに名前が必要でしょう?だから「Javascript」という言葉はフロントエンドの世界に広まりました。なぜかというと、とてもいい匂いがするからです!
例えば、私がJavascriptで変数を宣言するのを忘れていたとしても、大丈夫です。例えば、私が変数を宣言したかどうか忘れてしまっても大丈夫です!例えば、数字の1と文字列の1が等しいかどうかなど、何かが同じかどうかを比較したい場合、数字か文字列かは気にしません!これはJavascriptです!非常に「スマートなツール」。
しかし、時が経つにつれ、このビジネスに参加する人が増えています。ご存知のように、人はとても複雑な生き物で、それぞれに個性や好みがあります。その中でも、他のプログラムを書いていた人が、職業が変わろうが、興味があろうが、無理矢理だろうが、とにかく、やってくるんです。ここに来てから、この "Javascriptツール "が自分たちの考え方に大きく反することに気づいたようです。
例えば:私が宣言していない変数と、それが機能する理由について、私にプロンプトを出すべきではありませんか?新しく作るかどうかは私に選ばせてください。例えば、数字1と文字列1が異なる型である場合、どうしてそれらが等しいと考えることができますか?要するに、Javascriptの "知的思考 "は、彼らの見解では正しくないのです。なぜなら、いったんプログラムが独自の "思考 "を持つと、制御不能になるからです。
これらの "マスター "の登場で、フロントエンドの世界は劇的に変化しましたので、フロントエンドがバックエンドに対抗するのに十分なように、フロントエンドが非常に重要になっている場合、あなたは、"Javascript "は、変数の昇格など、許可されていないことを行うことはできません!例えば、変数の昇格、プロンプトなしの重複変数定義、振る舞いを判断するためのプライベート型変換などです。そして、前述のように、Javascriptはとても人気があるので、既存の動作を再定義することは、フロントエンド・コミュニティ全体を破壊する効果があります。それよりも、今あるものを維持したまま、新しい振る舞いを追加する方が良いでしょう!このように、letとconstは変数を定義するための2つのキーワードです。今回、varの教訓から学び、これら2つの変数は昇格せず、複数回宣言することができず、独自の排他的なスコープを持ちます。より包括的に言うと、letは可変変数に使われ、constは不変変数に使われます。オブジェクトであろうと配列であろうと、情報を渡す限り、変更することはできません。あなたが内部的にどのように変更するかについては、私は気にしません。私はただ、あなたが私を通して見つけたものが、あなたの古い家になるようにするだけです!