修改let

This commit is contained in:
Ruan Yifeng
2015-03-04 18:51:25 +08:00
parent 5618f6e5e7
commit db97b33931
3 changed files with 18 additions and 4 deletions
+13
View File
@@ -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
View File
@@ -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
View File
@@ -221,7 +221,7 @@ var React = require('react');
var Breadcrumbs = React.createClass({
render() {
return &lt;nav />;
return <nav />;
}
});
@@ -232,7 +232,7 @@ import React from 'react';
const Breadcrumbs = React.createClass({
render() {
return &lt;nav />;
return <nav />;
}
});