From 192928dc4281f3fa76f1218db1b79416b31659b1 Mon Sep 17 00:00:00 2001 From: ruanyf Date: Wed, 21 Dec 2016 14:54:20 +0800 Subject: [PATCH] docs(let): edit let --- docs/let.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/let.md b/docs/let.md index 0cc6c2c..bce62d8 100644 --- a/docs/let.md +++ b/docs/let.md @@ -29,7 +29,7 @@ console.log(i); 上面代码中,计数器`i`只在`for`循环体内有效,在循环体外引用就会报错。 -下面的代码如果使用`var`,最后输出的是10。 +下面的代码如果使用`var`,最后输出的是`10`。 ```javascript var a = []; @@ -55,17 +55,19 @@ for (let i = 0; i < 10; i++) { a[6](); // 6 ``` -上面代码中,变量`i`是`let`声明的,当前的`i`只在本轮循环有效,所以每一次循环的`i`其实都是一个新的变量,所以最后输出的是6。 +上面代码中,变量`i`是`let`声明的,当前的`i`只在本轮循环有效,所以每一次循环的`i`其实都是一个新的变量,所以最后输出的是`6`。你可能会问,如果每一轮循环的变量`i`都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量`i`时,就在上一轮循环的基础上进行计算。 ### 不存在变量提升 `let`不像`var`那样会发生“变量提升”现象。所以,变量一定要在声明后使用,否则报错。 ```javascript +// var 的情况 console.log(foo); // 输出undefined -console.log(bar); // 报错ReferenceError - var foo = 2; + +// let 的情况 +console.log(bar); // 报错ReferenceError let bar = 2; ``` @@ -88,7 +90,7 @@ if (true) { ES6明确规定,如果区块中存在`let`和`const`命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 -总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。 +总之,在代码块内,使用`let`命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。 ```javascript if (true) {