mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2024-04-21 12:32:22 +00:00
修改let
This commit is contained in:
@@ -167,6 +167,19 @@ foo(2) // 2
|
||||
|
||||
上面代码中,参数y的默认值等于x,由于处在函数作用域,所以x等于参数x,而不是全局变量x。
|
||||
|
||||
参数变量是默认声明的,所以不能用let或const再次声明。
|
||||
|
||||
```javascript
|
||||
|
||||
function foo(x = 5) {
|
||||
let x = 1; // error
|
||||
const x = 2; // error
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
上面代码中,参数变量x是默认声明的,在函数体中,不能用let或const再次声明,否则会报错。
|
||||
|
||||
参数默认值可以与解构赋值,联合起来使用。
|
||||
|
||||
```javascript
|
||||
|
||||
+3
-2
@@ -29,7 +29,6 @@ for(let i = 0; i < arr.length; i++){}
|
||||
console.log(i)
|
||||
//ReferenceError: i is not defined
|
||||
|
||||
|
||||
```
|
||||
|
||||
上面代码的计数器i,只在for循环体内有效。
|
||||
@@ -88,7 +87,7 @@ if (1) {
|
||||
|
||||
```
|
||||
|
||||
上面代码中,由于块级作用域内typeof运行时,x还没有声明,所以会抛出一个ReferenceError。
|
||||
上面代码中,由于块级作用域内typeof运行时,x还没有值,所以会抛出一个ReferenceError。
|
||||
|
||||
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
|
||||
|
||||
@@ -105,6 +104,8 @@ if (true) {
|
||||
|
||||
上面代码中,存在全局量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。
|
||||
|
||||
ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些命令,就会报错。
|
||||
|
||||
总之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称TDZ)。
|
||||
|
||||
```javascript
|
||||
|
||||
+2
-2
@@ -221,7 +221,7 @@ var React = require('react');
|
||||
|
||||
var Breadcrumbs = React.createClass({
|
||||
render() {
|
||||
return <nav />;
|
||||
return <nav />;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -232,7 +232,7 @@ import React from 'react';
|
||||
|
||||
const Breadcrumbs = React.createClass({
|
||||
render() {
|
||||
return <nav />;
|
||||
return <nav />;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user