写法、类型

函数声明

function 函数名(参数) {
  // 执行语句
}

🌈 函数表达式(有名)

var test = function test1() {
  // 执行语句
  // test1 内部可见
  // test1(); // 能够执行
  // test1.name; // test1
}

test.name; // test1

test(); // 可执行
**test1(); // 报错,test1函数外部不可见**

函数表达式(匿名)

// 整体是个匿名函数表达式,function匿名函数这个值,这个整体是字面量
var test = function() {
  var a = 1, b = 1; // 推荐
  // var a = b = 1; //不推荐,此时的 b 并没有被 var ,b 为全局变量
}

var a = 10; // 10 这个值就是字面量
var a = function b() {
  console.log(a, b); // [Function: b] [Function: b]
  console.log(a.name, b.name); // b b
}
a();

形参、实参

function test(a, b) { // a, b 是形参

}
test(1, 2); // 1, 2 是实参

🌈 形参、实参个数可以不相等

function test(a, b, c) {
  console.log(arguments.length); // 实参有 2 个:1 跟 2
  console.log(test.length); // 形参有3个:a, b, c
}
test(1, 2);
(function() {}).length;             // 0

实参求和

function sum() {
  return [...arguments].reduce((total, cur) => total += cur, 0);
}

sum(1, 2, 3);

🌈 arguments