函数

函数是一段可以由其他代码或自身调用,或是一个引用函数的变量。当一个函数被调用时,参数作为输入传递给函数,函数可以选择性地返回值。在JavaScript中,函数也是一个对象

函数名是一个标识符,包含在函数声明或函数表达式的一部分中。函数名的作用域取决于函数名是声明还是表达式。

不同类型的函数

匿名函数是指没有函数名的函数。只有函数表达式可以是匿名的,函数声明必须有名称

js
// Anonymous function created as a function expression
(function () {});

// Anonymous function created as an arrow function
() => {};

以下术语在 ECMAScript 语言规范中未使用,它们是用于指代不同类型函数的术语。

命名函数是指带有函数名的函数

js
// Function declaration
function foo() {}

// Named function expression
(function bar() {});

// Arrow function
const baz = () => {};

内部函数是指另一个函数内的函数(在本例中为 square)。外部函数是指包含函数的函数(在本例中为 addSquares

js
function addSquares(a, b) {
  function square(x) {
    return x * x;
  }
  return square(a) + square(b);
}

// Arrow function
const addSquares2 = (a, b) => {
  const square = (x) => x * x;
  return square(a) + square(b);
};

递归函数是指调用自身的函数。请参见递归

js
function loop(x) {
  if (x >= 10) return;
  loop(x + 1);
}

// Arrow function
const loop2 = (x) => {
  if (x >= 10) return;
  loop(x + 1);
};

立即调用函数表达式 (IIFE) 是一个在函数加载到浏览器编译器后立即调用的函数。识别 IIFE 的方法是在函数定义的末尾找到额外的左括号和右括号。

函数表达式,无论命名还是匿名,都可以立即调用。

js
(function foo() {
  console.log("Hello Foo");
})();

(function food() {
  console.log("Hello Food");
})();

(() => console.log("hello world"))();

声明的函数不能以这种方式立即调用,因为 IIFE 必须是函数表达式

js
function foo() {
  console.log('Hello Foo');
}();

如果您想了解更多关于 IIFE 的信息,请查看维基百科上的以下页面:立即调用函数表达式

另请参阅