ES 函数基础 —— 函数特性

published

函数是一等公民

ES 中的函数名本身就是变量,所以函数也可以作为值来使用:

  • 可以像传递参数一样把函数传递给另一个函数
  • 可以将一个函数作为另一个函数的返回值

函数是对象

在 ES 中,函数只不过是在特定环境中执行代码的对象。

不支持重载

在 Java 中,可以为一个函数编写两个定义,只要这两个定义接受的参数类型或者参数数量不同即可。 但在 ES 中,由于其函数参数的特殊性,真正的重载是不可能实现的(将函数名想象成指针,有助于理解这个事实 —— 指针只能指向一个对象)。

function addSomeNumber(num) {
  return num + 100
}

function addSomeNumber(num) {
  return num + 200
}

addSomeNumber(100)     // 300

上面的代码中,函数 addSomeNumber() 被定义了两次,后定义的函数会覆盖先前定义的函数,因此,最后调用函数时,返回的结果就是 300。 虽然不可能实现真正的重载,但是可以通过 arguments 检查传入函数中参数的类型和数量并做出不同的反应,以模仿重载,比如:

function add(num1, num2) {
  if (arguments.length === 1) {
    console.log(num1 + 10)
  } else if (arguments.length === 2) {
    console.log(arguments[0] + num2)
  }
}