「这是我参与11月更文挑战的第 4 天,活动详情查看:2021最后一次更文挑战」
ES6 函数的扩展
一、函数参数的默认值
(1)函数参数指定默认值
ES 6 允许为函数的形参设置默认值。
示例代码如下:
// ES6 允许为函数的形参你设置其默认值
function fn(arg=1) {
console.log(arg);//1
}
fn();
(2)与解耦赋值配合使用
函数的参数同样可以通过解耦赋值进行操作,而解耦赋值也具有默认值的功能。两者可以结合在一起使用。
示例代码如下:
function fn([a,b=4]){
console.log(a+b);
}
fn([1]);//5
(3)函数参数的作用域
如果为函数的参数设置默认值的话,当函数声明进行初始化时,参数会形成一个独立的作用域。这个作用域会在函数初始化完毕时消失。
示例代码如下:
// ES6
let v = 100;
// 如果为函数的参数设置默认值的话,当函数声明进行初始化时,参数会形成一个独立的作用域。
function fun(arg=v) {
let v = 1000;
console.log(arg);
}
fun();
二、rest 参数
ECMAScript 6新增了 rest 参数(...变量名),用于获取函数多余的参数,替代 arguments对象。与 rest 参数配合的变量是一个数组,该变量将多余的参数放入数组中。
示例代码如下:
// 接收多余的参数(实参)- 定义的形参少于实参的个数
// ES5 - 利用arguments对象接收多余的参数
function fn(a,b){
console.log(a,b,arguments[2]);
}
fn(1,2,3)
// ES6 - 利用 rest 参数接收多余的参数(数组类型)
function fun(a,b,...args) {
// 扩展运算符 - 原地展开可迭代的对象(数组、字符串等)
console.log(a,b,...args);
}
fun(1,2,3,4,5)
值的注意的是:
- rest 参数之后不能再有 其他参数(即只能是最后一个参数),否则会报错。
- 函数的 length 属性,不包含 rest 参数。
三、箭头函数
ECMAScript 6新增了箭头函数(又称胖箭头函数),相比函数表达式具有较短的语法并以词法的方式绑定this。箭头函数总是匿名的。
// ES6 声明箭头函数,函数中的this -> 指向的是定义箭头函数时的上下文对象
var n = () => {
console.log(this);
}
n();//{}
var obj = {
sayMe : n
}
obj.sayMe()//{}
箭头函数的语法结构
箭头函数的注意事项
使用箭头函数时,需要注意一下几点:
- 函数体内的 this ,就是定义时所在的对象,而不是使用时所在的对象。
- 不可以当做构造函数。也就是说不可以使用 new 命令,否则会抛出一个错误。
- 不可以使用 arguments 对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
尾调用
尾调用(Tail Call )是函数式编程的一个重要概念。本身非常简单,就是指某个函数的最后一步是调用另一个函数。
function f(x){
return g(x);
}
上述代码示例中,f()函数的最后一步是调用 g() 函数,g() 函数就是尾调用。
值的注意的是,尾调用不一定出现在函数尾部,只要是最后一步操作即可。