mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-29 05:42:20 +00:00
edit style/block/let
This commit is contained in:
parent
1248f27af2
commit
f5d01f117d
@ -6,12 +6,12 @@
|
|||||||
|
|
||||||
**(1)let取代var**
|
**(1)let取代var**
|
||||||
|
|
||||||
ES6提出了两个新的声明变量的命令:let和const。其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。
|
ES6提出了两个新的声明变量的命令:`let`和`const`。其中,`let`完全可以取代`var`,因为两者语义相同,而且`let`没有副作用。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
"use strict";
|
'use strict';
|
||||||
|
|
||||||
if(true) {
|
if (true) {
|
||||||
let x = 'hello';
|
let x = 'hello';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -20,12 +20,12 @@ for (let i = 0; i < 10; i++) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码如果用var替代let,实际上就声明了一个全局变量,这显然不是本意。变量应该只在其声明的代码块内有效,var命令做不到这一点。
|
上面代码如果用`var`替代`let`,实际上就声明了一个全局变量,这显然不是本意。变量应该只在其声明的代码块内有效,`var`命令做不到这一点。
|
||||||
|
|
||||||
var命令存在变量提升效用,let命令没有这个问题。
|
`var`命令存在变量提升效用,`let`命令没有这个问题。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
"use strict";
|
'use strict';
|
||||||
|
|
||||||
if(true) {
|
if(true) {
|
||||||
console.log(x); // ReferenceError
|
console.log(x); // ReferenceError
|
||||||
@ -33,13 +33,13 @@ if(true) {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码如果使用var替代let,console.log那一行就不会报错,而是会输出undefined,因为变量声明提升到代码块的头部。这违反了变量先声明后使用的原则。
|
上面代码如果使用`var`替代`let`,`console.log`那一行就不会报错,而是会输出`undefined`,因为变量声明提升到代码块的头部。这违反了变量先声明后使用的原则。
|
||||||
|
|
||||||
所以,建议不再使用var命令,而是使用let命令取代。
|
所以,建议不再使用`var`命令,而是使用`let`命令取代。
|
||||||
|
|
||||||
**(2)全局常量和线程安全**
|
**(2)全局常量和线程安全**
|
||||||
|
|
||||||
在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量。这符合函数式编程思想,有利于将来的分布式运算。
|
在`let`和`const`之间,建议优先使用`const`,尤其是在全局环境,不应该设置变量,只应设置常量。这符合函数式编程思想,有利于将来的分布式运算。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// bad
|
// bad
|
||||||
@ -54,15 +54,15 @@ const c = 3;
|
|||||||
const [a, b, c] = [1, 2, 3];
|
const [a, b, c] = [1, 2, 3];
|
||||||
```
|
```
|
||||||
|
|
||||||
const声明常量还有两个好处,一是阅读代码的人立刻会意识到不应该修改这个值,二是防止了无意间修改变量值所导致的错误。
|
`const`声明常量还有两个好处,一是阅读代码的人立刻会意识到不应该修改这个值,二是防止了无意间修改变量值所导致的错误。
|
||||||
|
|
||||||
所有的函数都应该设置为常量。
|
所有的函数都应该设置为常量。
|
||||||
|
|
||||||
let表示的变量,只应出现在单线程运行的代码中,不能是多线程共享的,这样有利于保证线程安全。
|
长远来看,JavaScript可能会有多线程的实现(比如Intel的River Trail那一类的项目),这时`let`表示的变量,只应出现在单线程运行的代码中,不能是多线程共享的,这样有利于保证线程安全。
|
||||||
|
|
||||||
**(3)严格模式**
|
**(3)严格模式**
|
||||||
|
|
||||||
V8引擎只在严格模式之下,支持let。结合前两点,这实际上意味着,将来所有的编程都是针对严格模式的。
|
V8引擎只在严格模式之下,支持`let`。结合前两点,这实际上意味着,将来所有的编程都是针对严格模式的。
|
||||||
|
|
||||||
## 字符串
|
## 字符串
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user