为什么名称' let'在JavaScript中选择用于块范围的变量声明?

时间:2016-06-20 07:38:11

标签: javascript ecmascript-6 let

我理解为什么var采用该名称 - 它是变量,const - 它是一个常量,但let的名称背后的意义是什么,它的范围是当前的块?是吧?

8 个答案:

答案 0 :(得分:315)

Let是一个由早期编程语言(如Scheme和Basic)采用的数学语句。变量被认为是不适合更高抽象级别的低级实体,因此许多语言设计者希望引入类似但更强大的概念,如Clojure,F#,Scala,其中let可能意味着一个值,或者< em>可以分配但未更改的变量,这反过来又让编译器捕获更多的编程错误并更好地优化代码。 JavaScript从一开始就有var,所以他们只需要另一个关键字,而且只是借用了许多其他使用let已尽可能接近var的传统关键字的语言,虽然在JavaScript let中创建了块范围局部变量。

答案 1 :(得分:68)

我猜它遵循数学传统。在数学中,通常会说“让x为任意实数”或类似。

答案 2 :(得分:54)

添加到exebook's response,关键字的数学用法也很好地封装了{Javascript / ES6中使用的let的范围含义。具体来说,就像下面的ES6代码忽略toPrint大括号中的赋值并打印出'Hello World'的值:

let toPrint = 'Hello World.';
{
    let toPrint = 'Goodbye World.';
}
console.log(toPrint); // Prints 'Hello World'
正式化数学中使用的(特别是证明的编写)表明变量的当前实例仅存在于该逻辑思想的范围内。在下面的例子中,x在输入新想法时立即获得新的身份(通常这些是证明主要想法所必需的概念)并在子证明结束时立即恢复到旧的x。当然,就像在编码中一样,这被认为有点令人困惑,因此通常通过为另一个变量选择不同的名称来避免。

设x是这样......

证明材料

新主意{让x成为别的......证明某事}结束新主意

用旧x

证明主要想法

答案 3 :(得分:34)

它完全符合var对范围差异的作用。现在它不能取名var,因为已经采用了。

所以看起来它已经采用了一个有趣的英语语言结构中具有语义的下一个最佳名称。

let myPet = 'dog';

在英语中它说&#34;让我的宠物成为一只狗&#34;

答案 4 :(得分:9)

最有可能的是,这是最惯用的选择。不仅说起来容易,而且直观易懂。有些人可能会争论,甚至比var还要多。

但我认为这有更多的历史。

来自Wikipedia

  达纳斯科特的LCF语言是将lambda演算演变为现代函数语言的一个阶段。这种语言引入了let表达式,从那时起就出现在大多数函数式语言中。

     

状态完全命令式语言(如ALGOL和Pascal)本质上实现了一个let表达式,用于在块结构中实现受限制的函数范围。

对于Javascript中的let,我想相信这也是一种灵感。

答案 5 :(得分:1)

我认为JavaScript对Scheme的负债在这里很明显。 Scheme不仅具有let,而且具有let *,let *值,let语法和let值。 (请参见《方案编程语言》,第四版。)

(((这种选择进一步增强了JavaScript是Lispy的概念,但是-在我们被迷住之前-并非谐音。)))

答案 6 :(得分:0)

让我们使用更直接的块级限制范围,而var通常是函数范围或全局范围。

似乎最有可能选择了let,因为它可以在许多其他语言中找到,以定义变量,例如BASIC等等。

答案 7 :(得分:0)

它也可能表示“词汇环境类型或附加条件”之类的东西。让我感到困扰的是,它只是“让 this that ”。而且让rec在lambda演算中毫无意义。