JavaScript 函数定义

  • 函数声明

    JavaScript函数使用关键字function定义。您可以使用函数声明函数表达式
    语法
    function functionName(parameters) {
      // code to be executed
    }
    声明的函数不会立即执行。它们“保存供以后使用”,稍后将在调用(调用)时执行。
    function myFunction(a, b) {
      return a * b;
    }
    尝试一下
    分号用于分隔可执行的JavaScript语句。由于函数声明不是可执行语句,因此以分号结束它并不常见。
  • 函数表达式

    也可以使用表达式定义JavaScript函数。函数表达式可以存储在变量中:
    var x = function (a, b) {return a * b};
    尝试一下
    函数表达式存储在变量中后,变量可用作函数:
    var x = function (a, b) {return a * b};
    var z = x(4, 3);
    尝试一下
    上面的函数实际上是一个匿名函数(一个没有名字的函数)。存储在变量中的函数不需要函数名称。始终使用变量名调用它们(调用)。
    上面的函数以分号结尾,因为它是可执行语句的一部分
  • 构造函数Function()

    正如您在前面的示例中所看到的,JavaScript函数是使用function关键字定义的。函数也可以使用内置的JavaScript函数构造函数Function()定义。
    var myFunction = new Function("a", "b", "return a * b");
    
    var x = myFunction(4, 3);
    尝试一下
    实际上你不必使用函数构造函数。
    var x = function (a, b) {return a * b};
    var z = x(4, 3);
    尝试一下
    大多数情况下,您可以避免在JavaScript中使用new关键字。
  • 函数提升

    在本教程的前面,您学习了“变量提升”(JavaScript变量提升)。提升是JavaScript将声明移动到当前范围顶部的默认行为。提升适用于变量声明和函数声明。因此,可以在声明JavaScript函数之前调用它们:
    myFunction(5);
    
    function myFunction(y) {
      return y * y;
    }
    使用表达式定义的函数不会被提升。
  • 自我调用函数

    函数表达式可以“自我调用”。自动调用(启动)自调用表达式,而不调用。如果表达式后跟(),函数表达式将自动执行。您无法自行调用函数声明。您必须在函数周围添加括号以指示它是函数表达式:
    (function () {
      var x = "Hello!!";  // 我将自动调用
    })();
    尝试一下
    上面的函数实际上是一个匿名的自调用函数(没有名称的函数)。
  • 函数可以用作值

    JavaScript函数可以用作值:
    function myFunction(a, b) {
      return a * b;
    }
    
    var x = myFunction(4, 3);
    尝试一下
    JavaScript函数可以在表达式中使用:
    function myFunction(a, b) {
      return a * b;
    }
    
    var x = myFunction(4, 3);
    尝试一下
  • 函数是对象

    JavaScript中的typeof运算符返回函数是“function”。但是,JavaScript函数最好被描述为对象。JavaScript函数具有属性和方法。arguments.length属性返回调用函数时收到的参数数量:
    function myFunction(a, b) {
      return arguments.length;
    }
    尝试一下
    toString()方法将函数作为字符串返回:
    function myFunction(a, b) {
      return a * b;
    }
    
    var txt = myFunction.toString();
    尝试一下
    定义为对象属性的函数称为对象的方法。用于创建新对象的函数称为对象构造函数。
  • 箭头功能

    箭头函数允许使用简短的语法来编写函数表达式。您不需要function关键字,return关键字和大括号。
    // ES5
    var x = function(x, y) {
      return x * y;
    }
    
    // ES6
    const x = (x, y) => x * y;
    尝试一下
    箭头功能没有自己的this功能。它们不适合定义对象方法。箭头功能未被提升。它们必须在使用前进行定义。使用const比使用更安全var,因为函数表达式始终是常量值。如果函数是单个语句使用return,则只能省略关键字和大括号。因此,保持它们可能是一个好习惯:
    const x = (x, y) => { return x * y };
    尝试一下
    IE11或更早版本不支持箭头功能。