私はなぜvar
がその名前をとるのか理解します - それは可変であり、const
- それは定数ですが、let
の名前の後ろにある意味は何ですか、現在のブロックに適用範囲は?なるがままに?
LetはSchemeやBasicのような初期のプログラミング言語によって採用された数学的な文です。変数は高水準の抽象化には適していない低レベルのエンティティと考えられます。したがって、Clojure、F#、Scalaのように、似ているがより強力な概念を導入したいという多くの言語設計者の望みは、let
は値、または_を意味します。代入することはできますが、変更することはできません、これにより、コンパイラはより多くのプログラミングエラーを検出し、コードをより最適化できます。 JavaScriptは最初からvar
を持っていたので、彼らはちょうどもう1つのキーワードを必要とし、let
をできるだけvar
に近い伝統的なキーワードとして使用する他の何十もの言語から借用しました。 JavaScriptではlet
は代わりにブロックスコープローカル変数を作成します。
私はそれが数学的伝統に従っていると思います。数学では、「xを任意の実数にする」などとよく言われます。
exebookの応答 に加えて、キーワード let の数学的使用法は、Javascript/ES6で使用される場合のlet
の有効範囲の意味合いもうまくカプセル化しています。具体的には、次のES6コードでtoPrint
の中括弧内の割り当てが無視され、'Hello World'
の値が出力されるのと同じです。
let toPrint = 'Hello World.';
{
let toPrint = 'Goodbye World.';
}
console.log(toPrint); // Prints 'Hello World'
形式化された数学(特に証明の記述)で使用される let は、変数の現在のインスタンスがその論理的概念の範囲内でのみ存在することを示します。次の例では、xは新しいアイデアを入力するとすぐに新しいアイデンティティを取得し(通常、これらはメインのアイデアを証明するのに必要な概念です)、準証明が終了するとすぐに古いxに戻ります。もちろん、コーディングと同じように、これはやや混乱を招くと考えられるため、通常は他の変数に別の名前を選択することで避けられます。
xをそう、そう...としましょう
証拠
新しいアイデア{xを他の何かにしよう。何かを証明する}新しいアイデアを結び付ける
古いxで主な考えを証明する
これはvar
がスコープの違いで行うこととまったく同じです。今ではvar
という名前は使えません。
それでそれはそれが面白い英語の構成において意味論を持っている次に最も良い名前を取ったように見えます。
let myPet = 'dog';
英語でそれは "私のペットを犬にしましょう"と言っています
最も可能性が高いのは、それが最も慣用的な選択だったということです。話すのが簡単なだけでなく、理解するのも直感的です。 var
以外にも、議論できる人もいます。
しかし、もう少し歴史があると思います。
から ウィキペディア :
Dana ScottのLCF言語は、ラムダ計算が現代の関数型言語に進化した段階です。この言語はlet式を導入しました。それはそれ以来、ほとんどの関数型言語で登場しています。
ALGOLやPascalなどのステートフル命令型言語では、基本的にlet式を実装して、制限された範囲の関数をブロック構造で実装します。
私はこれがJavascriptのlet
にとってもインスピレーションであると信じたいと思います。
私はJavaScriptのSchemeに対する恩恵はここで明らかだと思います。 Schemeはletだけでなく、let *、let * -values、let-syntax、およびlet-valuesも持っています。 (Schemeプログラミング言語、第4版を参照)。
((この選択により、JavaScriptがLispyであるという概念にさらなる信頼性が追加されますが、 - 私たちが気にする前に - ホモアイコンではありません)
Varは通常関数スコープまたはグローバルスコープであるのに対し、もっと直接的なブロックレベル限定スコープを使用してみましょう。
BASICなどの他の多くの言語で変数を定義することがわかっているため、letが最も選択されたようです。