1. **const f = function () { ... }** 是一个函数表达式
  2. **function() { ... }** 是一个匿名函数
  3. 匿名函数常用于将函数作为参数来传递的场景中,比如:
    1. 函数表达式
    2. 回调
  4. 匿名函数没有函数名,若需要调用匿名函数,可使用立即执行函数的写发来调用匿名函数

通过这篇文档主要介绍“函数表达式”和“匿名函数”这俩词的概念。函数表达式、匿名函数,它们是两个不同但相关的概念。但在实际使用中,人们往往会将它们混用。

函数表达式(Function Expressions)

函数表达式是常见的定义函数的方法,它使用 function 关键字,后跟函数名、参数列表和函数体。这个被赋值的函数可以是有名字的,也可以是匿名的。

  1. // 这是一个函数表达式
  2. var greet = function sayHello() {
  3. console.log("Hello Wrold!");
  4. };
  5. // 这也是一个函数表达式,但这次我们使用了一个匿名函数
  6. var greet = function() {
  7. console.log("Hello Wrold!");
  8. };

JS 中,函数也是一个数据,语法上,函数可以用于任何需要数据的地方。函数是一个引用类型,将其赋值给某个变量时,变量中保存的是函数的地址。函数表达式的函数名可以省略,因为没有意义,没啥用。

  • 函数表达式的值就是函数本身。
  • 当函数成为一个表达式时,它既不会提升(函数声明会提升),也不会污染全局对象。

函数表达式的常见形式:

  1. // 赋值表达式中
  2. const test = function () {
  3. // => 函数体
  4. }
  1. // 小括号中
  2. (function () {})
  1. // 对象的成员
  2. const obj = {
  3. test: function () {},
  4. }
  1. // 数组的成员
  2. const arr = [
  3. function () {},
  4. ];

匿名函数(Anonymous Functions)

匿名函数是一种没有名字的函数。它可以用于函数表达式,也可以用于其他需要使用函数但不需要函数名的地方(如函数作为参数传递等)。

  1. // 这是一个匿名函数
  2. function() {
  3. console.log("Hello Wrold!");
  4. }
  5. // 作为回调函数使用的匿名函数
  6. setTimeout(function() {
  7. console.log('Hello Wrold!');
  8. }, 1000);

所以,所有匿名函数都可以用于函数表达式,但并非所有函数表达式都必须使用匿名函数。它们的关系是交叉的,但它们代表的是不同的概念。

由于匿名函数并没有函数名,若我们想要执行一个匿名函数,可以使用立即执行函数的写法来实现,比如:

  1. (function() {
  2. console.log("Hello Wrold!");
  3. })()