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

Vit*_*ich 285 javascript let ecmascript-6

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

exe*_*ook 336

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

  • 官方的Mozilla文档页面引用了此页面的这个问题https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let (79认同)
  • 换句话说,`let`传统上用于描述一个常量,如'让C =光速'所以Javascript决定使用let来描述带有非标准范围的变量,同时为常量引入另一个关键字. (13认同)
  • "len('var')=== len('let')`这也很好,这意味着你的声明在你的编辑器中很好地排列.我还没有发现任何暗示这是故意的,但它可以是a)视觉上令人愉悦和更具可读性,或者b)如果你把两者混合起来可能会非常烦人(这似乎是一个坏主意,但我'我看到它完成了). (8认同)
  • @fijiaaron 是的,你错了。这在科学中也不是一个很好的用法,你通常不会将它用于常量,因为这些变量是每个人都知道的。c *是*光速。我们不必“顺其自然”。当 x 根本不是常数时,我们说“令 x 为到中心的距离”。 (4认同)
  • @fijiaaron:非标准范围如何?并不是整个功能无论您声明的是什么块,都以某种奇怪的开头开始? (2认同)

Tig*_*uev 70

我想它遵循数学传统.在数学中,人们常说"让x为任意实数"或类似.

  • 我更喜欢这个答案,因为它很简短并且非常相关,因为我们都学过代数,然后可能应该像其他人指出的那样进行解释。 (4认同)
  • @carloswm85 我想这确实会很好。 (3认同)

Eva*_*oks 62

添加到exebook的回应,关键字的数学使用也封装很好的作用域影响let在Javascript/ES6使用时.具体来说,正如下面的ES6代码忽略大括号中的赋值toPrint并打印出以下值'Hello World':

let toPrint = 'Hello World.';
{
    let toPrint = 'Goodbye World.';
}
console.log(toPrint); // Prints 'Hello World'
Run Code Online (Sandbox Code Playgroud)

在正式数学(特别是证明的写入)作为用于表示一个变量的当前实例只存在于该逻辑构思的范围.在下面的例子中,x在输入新想法时立即获得新的身份(通常这些是证明主要想法所必需的概念),并在子证明结束时立即恢复到旧的x.当然,就像在编码中一样,这被认为有些混乱,因此通常通过为另一个变量选择不同的名称来避免.

设x是这样的......

  证明的东西

 新想法{让x成为别的东西......证明一些东西}结束新想法

 用旧x证明主要想法

  • 我认为这非常有用.接受的答案几乎有点误导,因为它谈到了无法改变的价值,这根本不是什么"让".`let`就是范围. (19认同)

Cha*_*lie 35

它确实var与范围差异有关.现在它不能取名,var因为已经采取了.

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

let myPet = 'dog';
Run Code Online (Sandbox Code Playgroud)

用英语说"让我的宠物成为狗"

  • @wide_eyed_pupil仅供参考:作为一名40多岁(虽然不是ES6的作者),他在BASIC长大,我所参与的社区中没有一个人在常规实践中使用LET; 我们只是分配变量,就像Python现在所做的那样(例如`A $ ="HELLO WORLD"`)所涉及的翻译包括Rockwell AIM 65 BASIC,Atari Basic,CP/M上的MBASIC 5,Applesoft BASIC,甚至BASCOM,MS BASIC CP/M上的编译器.我记得VAX BASIC确实有LET,但没有要求它.当时记忆力很紧,每个声明的3或4个额外字符的程序文本都有所不同,特别是在"大"程序中. (5认同)
  • 尽管let的起源可能是语言学和数学,但是接近家庭的参考无疑是所有版本的BASIC编程语言中的LET语句,ES6的许多作者如果已经结束就会开始学习40哟. (4认同)

oxa*_*org 9

最可能的可能性是它是最惯用的选择.不仅说起来容易,而且直观易懂.有些人可能会争论,甚至更多var.

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

来自维基百科:

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

状态完全命令式语言(如ALGOL和Pascal)实质上是在块结构中实现let表达式,以实现受限制的函数范围.

我想相信这也是一个灵感,因为let在Javascript中.