为什么在JavaScript中为“块”范围的variables声明select了“let”?

我明白为什么var需要这个名字 – 它是可变的, const – 它是一个常量,但let的名字后面的含义是什么? 随它去?

让我们来看一个早期编程语言如Scheme和Basic所采用的math语句。 variables被认为是低层次的实体,不适合更高层次的抽象,因此许多语言devise者希望引入类似但更强大的概念,比如Clojure,F#,Scala,其中let可能意味着一个值,或者是一个可以赋值variables,但是没有改变 ,这又使得编译器捕捉到更多的编程错误并更好地优化代码。 JavaScript从一开始就有了var ,所以他们只需要另外一个关键字,并且从几十种其他语言中借用,尽可能使用已经作为传统关键字的尽可能接近var JavaScript,尽pipe在JavaScript中创build了块范围局部variables。

我想它遵循math传统。 在math中,人们经常说“让x是任意的实数”或者这样。

它确实做了var与范围差异。 现在它已经不能使用名称var了。

所以看起来,它已经采取了有趣的英语语言结构中具有语义的下一个最好的名字。

 let myPet = 'dog'; 

用英文说“让我的宠物成为狗”

增加了对于exebook的响应 ,关键字的math用法让我们也很好的封装了在Javascript / ES6中使用的范围含义。 具体来说,正如下面的ES6代码忽略toPrint大括号的toPrint并打印出'Hello World'的值:

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

用于forms化math(特别是certificate的写作)表明,variables的当前实例仅存在于该逻辑思想的范围内。 在下面的例子中,x在input新想法时立即获得新的身份(通常这些是certificate主要想法所必需的概念),并在分证结束时立即恢复到旧的x。 当然,就像在编码中一样,这被认为有些混乱,所以通常通过为其他variablesselect不同的名称来避免。

让x如此…

certificate的东西

新的想法{让x是别的…certificate某事}结束新的想法

用老xcertificate主要想法

最有可能的是这是最习惯的select。 不仅说话容易,而且直观易懂。 有些人可能会认为,甚至比var更重要。

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

从维基百科:

达纳•斯科特(Dana Scott)的LCF语言是lambda微积分演变为现代function语言的一个阶段。 这种语言引入了从那时起在大多数function语言中出现的letexpression式。

ALGOL和Pascal等全状态命令式语言实质上实现了一个letexpression式,以块结构实现受限的函数范围。

我想相信这也是一个启发,因为let Javascript。