ES6为开发者提供了很多实用的新功能,使得编码变得更加的流畅。今天向大家介绍一下 ES6函数相关的知识:默认参数、rest参数及箭头函数。
默认参数
JS函数十分的灵活,它允许接收实参的个数和定义形参的个数不一致。有些参数又是必须的,为了保证程序的健壮性,我们应该尽量避免此类参数不传所引发的 bug.ES5时代的解决方案:
function getInfo(name, age) {
name = name || '-';
age = age || 1;
// ... 更多代码
console.log(name, age);
}
getInfo('xixi', 3); //xixi 3
getInfo(); // - 1
我们来看一下 ES6提供的默认参数的写法:
function getSuperInfo(name = '-', age = 1) {
console.log(name, age);
}
getSuperInfo('xixi', 3);// xixi 3
getSuperInfo(); // - 1
两段代码的功能相同,比较而言ES6的写法更加的简洁。还有一点 ES6的写法更加的安全。请大家思考一下下面代码的执行结果:
getInfo('', 0); // - 1
getSuperInfo('', 0);// 0
getInfo函数返回的结果在一定程度上并不能反应真实的情况,比如用户就想用 getInfo('', 0);表达一个刚刚被怀上的小孩没有名字也没有年龄呢。问题的关键在于|| 只要是 中falsy 的情况都会执行逻辑与后面的代码。
比较而言 getSuperInfo 函数的默认值形式就相对安全,没传值就使用默认值,传值了就使用实参。ES6判断是否传值是与 undefined进行严格比较===.
getSuperInfo(undefined, 0); // - 0
getSuperInfo(null, 0); // null 0
// 大家可以试一下其他 falsy 的执行结果...
rest 参数
rest 参数表示用数组存取所有剩余的实参,可以用来代替 arguments。有两点需要注意:
- 函数定义时,rest 参数位置必须在最后🔔
- 只能有一个 rest 参数🔔
Demo:
function getStaff(name, age, ...rest) {
console.log(name, age);
console.log(rest);
}
getStaff('xixi', 38, 'kaka', 'yoyo', 'qiqi');
// xixi 38
// ["kaka", "yoyo", "qiqi"]
实际的应用场景待说明
箭头函数
箭头函数,外国人也称之为fat arrow functions,大胖箭头函数🤣。箭头函数语法使得函数的定义更加的简洁。
//ES5
(function () {
console.log('hi~');
})();
//ES6
(() => {
console.log('hello xixi~');
})();
箭头函数比语法简介更大的有点是词法作用域,有了箭头函数再也不用写var that = this;、var _this = this;。 初学者往往会认为箭头函数this,其实不然它的 this 是函数定义时就决定了并且无法改变。例子待给出
🔔关于箭头函数有几点需要注意:
- 箭头函数不能作为构造函数,他也没有 prototype
- this 时词法绑定的而不是动态运行绑定的
- 不能使用arguments,可以使用 rest 参数代替