Let's _ the _ lesson.Can you read the _,Mike

let 语句声明一个块级作用域的本地變量并且可选的将其初始化为一个值。

变量名必须是合法的标识符。
变量的初始值可以是任意合法的表达式。

let允许你聲明一个作用域被限制在 级中的变量、语句或者表达式与  关键字不同的是, 声明的变量只能是全局或者整个函数块的  和 let 的不同之处在於后者是在编译时才初始化()。

就像 一样let不会在全局声明时(在最顶部的范围)创建 对象的属性。

可以从了解我们为什么使用“let

let声明的变量只在其声明的块或子块中可用,这一点与var相似。二者之间最主要的区别在于var声明的变量的作用域是整个封闭函数

在程序和方法的最顶端,let不像 var 一样let不会在全局对象里新建一个属性。比如:

位于函数或代码顶部的var声明会给全局对象新增属性, 而let不会例如:

在处理的时候,可以通过let声明而不是闭包来创建一个或多个私有成员

可以使用var创建和闭包具有相同隐私模式的局部變量,但是它们需要函数作用域(通常是模块模式中的IIFE)而不仅仅是上面示例中的块作用域。

在同一个函数或块作用域中重复聲明同一个变量会引起

在  语句中只有一个块,你可能因此而遇到错误

然而,需要特别指出的是一个嵌套在 ase 子句中的块会创建一个新嘚块作用域的词法环境,就不会产生上诉重复声明的错误

声明的变量直到它们的定义被执行时才初始化。在变量初始化前访问該变量会导致 该变量处在一个自块顶部到初始化处理的“暂存死区”中。

由于詞法作用域表达式(foo + 55)内的标识符foo被认为是if块的foo变量,而不是值为33的块外面的变量foo

在同一行,这个if块中的foo已经在词法环境中被创建了但昰还没有到达(或者终止)它的初始化(这是语句本身的一部分)。

这个if块里的foo还依旧在暂存死区里

在以下情况下,这种现象可能会使您感到困惑 let n of n.a已经在for循环块的私有范围内。因此标识符n.a被解析为位于指令本身("let n")中的“ n”对象的属性“ a”。

在没有执行到它的初始化语句の前它仍旧存在于暂存死区中。

用在块级作用域中时, let将变量的作用域限制在块内, 而var声明的变量的作用域是在函数内.

而这种var 与 let合並的声明方式会报错误, 因为var会将变量提升至块的顶部, 这会导致隐式地重复声明变量.

我要回帖

更多关于 forget 的文章

 

随机推荐