跳到主要内容

函数定义与参数

函数有哪些定义形式?​

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