我理解为什么var取这个名字-它是变量,const -它是常量,但是let这个名字背后的含义是什么,它的作用域是当前块?顺其自然?


当前回答

它也可以指“词汇环境类型或绑定”之类的东西。让我感到困扰的是,它仅仅是“让这个成为那个”。让rec在微积分中没有意义。

其他回答

我认为JavaScript对Scheme的亏欠是显而易见的。Scheme不仅有let,还有let*、let*-values、let-syntax和let-values。(参见方案编程语言,第4版)。

(这个选择进一步证明了JavaScript是Lispy,但是——在我们失去理智之前——并不是同源的。))))

Let使用更直接的块级有限作用域,而var通常是函数作用域或全局作用域。

之所以选择let,似乎是因为在许多其他语言中都可以找到它来定义变量,例如BASIC和许多其他语言。

除了exebook的响应外,关键字let的数学用法也很好地封装了let在Javascript/ES6中使用时的作用域含义。具体来说,就像下面的ES6代码在输出'Hello World'的值时不知道topprint的大括号中的赋值一样,

let toPrint = 'Hello World.';
{
    let toPrint = 'Goodbye World.';
}
console.log(toPrint); // Prints 'Hello World'

let as used in formalized mathematics (especially the writing of proofs) indicates that the current instance of a variable exists only for the scope of that logical idea. In the following example, x immediately gains a new identity upon entering the new idea (usually these are concepts necessary to prove the main idea) and reverts immediately to the old x upon the conclusion of the sub-proof. Of course, just as in coding, this is considered somewhat confusing and so is usually avoided by choosing a different name for the other variable.

设x为某某…

证明的东西

新想法{让x成为别的东西……证明某事结论新想法

用旧x证明主要思想

它也可以指“词汇环境类型或绑定”之类的东西。让我感到困扰的是,它仅仅是“让这个成为那个”。让rec在微积分中没有意义。

最有可能的是,这是最地道的选择。它不仅讲起来容易,而且很容易理解。有人可能会说,比var更重要。

但我觉得这事还有更久远的历史。

从维基百科:

Dana Scott的LCF语言是lambda演算向现代函数语言演变的一个阶段。这种语言引入了let表达式,从那时起,它就出现在大多数函数式语言中。 全状态命令式语言,如ALGOL和Pascal,本质上是在块结构中实现let表达式,以实现有限范围的函数。

我愿意相信这对Javascript中的let也是一种启发。