1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00

docs(function): fix 函数的默认参数

This commit is contained in:
ruanyf 2016-04-19 09:12:01 +08:00
parent d4ae227730
commit 81e186f62a
2 changed files with 8 additions and 13 deletions

View File

@ -19,18 +19,12 @@ log('Hello', '') // Hello World
上面代码检查函数`log`的参数`y`有没有赋值,如果没有,则指定默认值为`World`。这种写法的缺点在于,如果参数`y`赋值了,但是对应的布尔值为`false`,则该赋值不起作用。就像上面代码的最后一行,参数`y`等于空字符,结果被改为默认值。
为了避免这个问题通常需要先判断一下参数y是否被赋值如果没有再等于默认值。这有两种写法。
为了避免这个问题,通常需要先判断一下参数`y`是否被赋值,如果没有,再等于默认值。
```javascript
// 写法一
if (typeof y === 'undefined') {
y = 'World';
}
// 写法二
if (arguments.length === 1) {
y = 'World';
}
```
ES6允许为函数的参数设置默认值即直接写在参数定义的后面。
@ -57,9 +51,9 @@ var p = new Point();
p // { x: 0, y: 0 }
```
除了简洁ES6的写法还有两个好处首先阅读代码的人可以立刻意识到哪些参数是可以省略的不用查看函数体或文档其次有利于将来的代码优化即使未来的版本彻底拿掉这个参数也不会导致以前的代码无法运行。
除了简洁ES6的写法还有两个好处首先阅读代码的人可以立刻意识到哪些参数是可以省略的不用查看函数体或文档其次有利于将来的代码优化即使未来的版本在对外接口中,彻底拿掉这个参数,也不会导致以前的代码无法运行。
参数变量是默认声明的所以不能用let或const再次声明。
参数变量是默认声明的,所以不能用`let``const`再次声明。
```javascript
function foo(x = 5) {
@ -68,7 +62,7 @@ function foo(x = 5) {
}
```
上面代码中,参数变量`x`是默认声明的在函数体中不能用let或const再次声明否则会报错。
上面代码中,参数变量`x`是默认声明的,在函数体中,不能用`let``const`再次声明,否则会报错。
### 与解构赋值默认值结合使用
@ -343,8 +337,9 @@ add(2, 5, 3) // 10
```javascript
// arguments变量的写法
const sortNumbers = () =>
Array.prototype.slice.call(arguments).sort();
function sortNumbers() {
return Array.prototype.slice.call(arguments).sort();
}
// rest参数的写法
const sortNumbers = (...numbers) => numbers.sort();

View File

@ -182,7 +182,7 @@ Obj.prototype[Symbol.iterator] = function(){
function next(){
if (current){
var value = current.value;
var done = current == null;
var done = current === null;
current = current.next;
return {
done: done,