我理解为什么var取这个名字-它是变量,const -它是常量,但是let这个名字背后的含义是什么,它的作用域是当前块?顺其自然?
当前回答
我认为JavaScript对Scheme的亏欠是显而易见的。Scheme不仅有let,还有let*、let*-values、let-syntax和let-values。(参见方案编程语言,第4版)。
(这个选择进一步证明了JavaScript是Lispy,但是——在我们失去理智之前——并不是同源的。))))
其他回答
除了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的作用完全相同。现在它不能取名称var,因为已经取了。
所以它看起来已经采取了下一个最好的名字,在一个有趣的英语语言结构中有一个语义。
let myPet = 'dog';
在英语中它说“让我的宠物是一只狗”
Let是早期编程语言(如Scheme和Basic)采用的数学语句。变量被认为是低级实体,不适合高级抽象,因此许多语言设计者希望引入类似但更强大的概念,如Clojure、f#和Scala,其中let可能意味着一个值,或一个可以赋值但不能更改的变量,这反过来让编译器捕捉更多的编程错误并更好地优化代码。
JavaScript从一开始就有var,所以他们只是需要另一个关键字,只是借用了几十种其他语言,这些语言已经使用let作为传统关键字,尽可能接近var,尽管在JavaScript中let创建块作用域局部变量。
我认为JavaScript对Scheme的亏欠是显而易见的。Scheme不仅有let,还有let*、let*-values、let-syntax和let-values。(参见方案编程语言,第4版)。
(这个选择进一步证明了JavaScript是Lispy,但是——在我们失去理智之前——并不是同源的。))))
推荐文章
- 文档之间的区别。addEventListener和window。addEventListener?
- 如何检查动态附加的事件监听器是否存在?
- 如何写setTimeout与参数Coffeescript
- 将JavaScript字符串中的多个空格替换为单个空格
- JavaScript: override alert()
- 重置setTimeout
- 如何确保<select>表单字段被禁用时提交?
- jQuery有不聚焦的方法吗?
- 反应钩子-正确的方式清除超时和间隔
- TypeScript枚举对象数组
- 在React.js中正确的img路径
- 在React.js中更新组件onScroll的样式
- onClick ReactJS调用多个函数
- 如何在JavaScript中转义单引号(')?
- Ng-repeat结束事件