函数
函数是一段可以由其他代码或自身调用,或是一个引用函数的变量。当一个函数被调用时,参数作为输入传递给函数,函数可以选择性地返回值。在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 的信息,请查看维基百科上的以下页面:立即调用函数表达式