函数是一段封装了特定功能的可重复使用的代码块。它接受一个或多个输入参数,执行一些操作,然后返回结果。在 JavaScript 中,函数也是一种对象类型,可以像其他对象一样进行传递、赋值、作为参数和返回值等操作。
在 JavaScript 中,函数分为两种主要类型:函数声明和函数表达式。
1. 函数声明:
- 使用 `function` 关键字定义,后面跟着函数名和一对圆括号。
- 函数名可以用于递归调用和函数表达式中的命名函数。
- 函数声明会被提升到当前作用域的顶部,因此可以在函数声明之前调用。
示例:
function add(a, b) { return a + b; }
2. 函数表达式:
- 使用 `function` 关键字定义,但省略了函数名。
- 函数被赋值给一个变量或属性,或者作为函数参数传递。
- 可以使用命名函数表达式来在函数内部递归调用自己。
示例:
var add = function(a, b) { return a + b; };
这两种函数类型的区别在于函数声明会被提升到当前作用域的顶部,而函数表达式则不会。因此,在函数声明之前调用该函数是有效的,但在函数表达式之前调用该函数会导致错误。
此外,还有以下两种函数类型:
3. 箭头函数:
- 使用箭头语法定义,省略了 `function` 关键字和大括号。
- 可以省略圆括号和花括号,如果只有一个参数和一条语句的话。
- 箭头函数没有自己的 `this`,它们继承了父级作用域的 `this` 值。
示例:
var add = (a, b) => a + b;
4. 生成器函数:
- 使用 `function*` 关键字定义,后面跟着函数名和一对圆括号。
- 函数内部包含 `yield` 关键字,可以在执行过程中暂停并返回一个值。
- 生成器函数返回一个迭代器对象,可以使用 `next()` 方法逐个获取生成的值。
示例:
function* fibonacci() { var a = 0, b = 1; while (true) { yield a; [a, b] = [b, a + b]; } } var fib = fibonacci(); console.log(fib.next().value); // 输出: 0 console.log(fib.next().value); // 输出: 1 console.log(fib.next().value); // 输出: 1 console.log(fib.next().value); // 输出: 2 // ...
这些是 JavaScript 中常见的函数类型。选择何种类型的函数取决于具体需求和代码风格。