ES6 参数默认值

  • 在学习解构赋值时我们有提到过对象的属性/数组元素 设置默认值的方法。

  • 同样的,我们也可以给函数的参数设置默认值,当没有接收到该参数时就会使用默认值。

  • 使用方法: 在传参时直接通过=赋值即可,具体可看下面的例子。

  • 注意: 当需要第一个参数使用默认值,而指定第二个参数时,需要显式指定第一个参数值为undefined。(当显式指定参数为null时,是不会使用默认值的)

简单例子

1
2
3
4
5
6
7
8
9
10
function sum (a = 10, b = 5) {
return a + b;
}

console.log(sum(1, 2)); // 3
console.log(sum(5)); // 10
console.log(sum()); // 15
// 当需要第一个参数使用默认值,而指定第二个参数时,需要显式指定第一个参数值为undefined
// 需要注意,当显式指定参数为null时,是不会使用默认值的
console.log(undefined, 10); // 20

参数为对象并解构时的默认值

注意:参数对象进行解构赋值时易忘记设置默认的空对象{ a, b, c } = {},不给默认值很容易在函数体中使用结构出的变量时出现解构赋值报错的问题:

1
2
3
4
5
6
7
8
9
10
function test(row, {
type, buyerNick = false, isDecryptReceiverMobile = true, isDecryptPhone = true,
}) {
console.log(row);
console.log(type);
console.log(buyerNick);
console.log(isDecryptReceiverMobile);
console.log(isDecryptPhone);
}
test("some row"); // 会抛出解构赋值错误,因为第二个参数无法进行解构赋值操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 可以提供一个默认的空对象作为第二个参数来避免这个错误
function test(row, {
type, buyerNick = false, isDecryptReceiverMobile = true, isDecryptPhone = true,
} = {}) {
console.log(row);
console.log(type);
console.log(buyerNick);
console.log(isDecryptReceiverMobile);
console.log(isDecryptPhone);
}

test("some row");
/*
some row
undefined
false
true
true
*/

JS异步与单线程、Date、Math

单线程和异步 单线程:一次只能做一件事情,js就是单线程的。 异步:为了让单线程不阻塞,就出现了异步。 js是单线程的,但是遇到等待(网络请求/定时任务)的时候不能卡住,此时就需要异步。 异步通常是基于回调函数的形式,当然还有其他的方法实现异步,比如Promise JS是单线程语言,只能同时做一件事。 浏览器和nodejs已支持JS启动进程,如Web Worker JS和DOM渲染共用同一个线程,因为JS可修改DOM结构

阅读全文