函数定义与参数
函数有哪些定义形式?
function sum(num1, num2) {
return num1 + num2;
} // 函数声明
const sum2 = function (num1, num2) {
return num1 + num2;
}; // 函数表达式
const arrowSum = (a, b) => a + b; // 箭头函数, 单行可省略花括号并默认返回该行值
- 箭头函数: 没有自己的
prototype属性, 也不能用作生成器; - 函数本质: 函数是
Function类型的实例对象, 有自己的属性与方法, 详见 函数名与提升; - 二义性: 普通函数既能当函数调用又能当构造函数调用, ES6 用
class与箭头函数消解该歧义, 详见 class;
参数传递与默认值如何处理?
- 传参: JavaScript 统一按值传递, 参数数量与类型无需与定义一致, 未传的参数为
undefined, 对象参数的细节见 原始值与引用值; - 默认值: 在形参后写
= defaultValue, 未传或传undefined时使用;
function makeKing(name = "Henry", numerals = "VIII") {
return `King ${name} ${numerals}`;
}
makeKing(undefined, "VI"); // "King Henry VI"; undefined 视为未传
- 默认值作用域: 等价于在函数体顶部按参数顺序依次用
let声明; - 剩余参数: 用
...values收集任意数量的参数, 只能放在参数列表末尾;
const getSum = (...values) => values.reduce((x, y) => x + y, 0);
getSum(1, 2, 3); // 6