函数形参的默认值
在ES6中可以为函数形参指定默认值,如下:1
2
3
4
5function makeRequest(url, timeout = 2000,callback = function() {}) {
//函数的其余部分
}
还可以使用非原始值传参,如下面这样:1
2
3
4
5
6
7
8
9
10
11
12
13let value = 5;
function() {
return value++;
}
function add(first,second = getValue()){
return first+second;
}
console.log(add(1,1)); //2
console.log(add(1)); //6
console.log(add(1)); //7
getValue在声明的时候不会调用,只有在调用add且不传入第二个参数时才会调用。
不定参数
在函数的命名参数前添加三个点(…)就表明这是一个不定参数,该参数为一个数组,包含着自它之后传入的所有参数,通过这个数组名即可逐一访问里面的参数。
1 | function checkArgs(normalPara,...args){ |
调用checkArgs(),输出以下内容1
2
3
4
5a
2
3
b b
c c
箭头函数
箭头函数是一种使用箭头(=>)定义函数的新语法,但是它与传统的JavaScript函数有些许不同,主要集中在以下方面:
- 没有this、super、arguments和new.target绑定
- 不能通过new关键字调用
- 没有原型
- 不可以改变this的绑定
- 不支持arguments对象
- 不支持重复的命名参数
箭头函数语法
语法
箭头函数语法多变,但无论再怎么变化,主要由三部分组成,参数、箭头、函数体。
比如单参数,简单返回1
value => value
空函数1
() => {}
多参数,多返回1
(num1,num2)=> num1 + num2
类传统形式1
2
3
4
5(num1,num2)= {
//do something
return num1 + num2;
}
没有this绑定
js中函数内的this经常在调用的过程中发生改变,以前我们只能用蹩脚的bind或者call之类的来解决。现在,我们可以直接使用箭头函数。
箭头函数中的this值取决于改函数外部非箭头函数的this值,且不能通过call()、apply()和bind()方法来改变this的值。
1 | var handler = { |
上面的例子中使用了箭头函数,于是导致this.dosomething这一行的this总是指向handler对象,这种行为为我们带来了许多方便。
箭头函数缺少正常函数所拥有的prototype属性,它的设计初衷是“即用即弃”。在日常开发中很适合用于回调函数。