目录

JavaScript 函数定义


JavaScript 函数有定义的function关键字。

你可以使用一个函数宣言或一个函数表达


函数声明

在本教程的前面部分,您了解到函数是宣布使用以下语法:

function functionName( parameters) {
  // code to be executed
}

声明的函数不会立即执行。它们是"saved for later use",并且将在稍后被调用(调用)时执行。

示例

function myFunction(a, b) {
  return a * b;
}
亲自试一试 »

分号用于分隔可执行的 JavaScript 语句。
既然有一个函数宣言不是可执行语句,因此不常见以分号结尾。


函数表达式

JavaScript 函数也可以使用表达

函数表达式可以存储在变量中:

示例

const x = function (a, b) {return a * b};
亲自试一试 »

将函数表达式存储在变量中后,该变量可以用作函数:

示例

const x = function (a, b) {return a * b};
let z = x(4, 3);
亲自试一试 »

上面的函数实际上是一个匿名函数(没有名称的函数)。

存储在变量中的函数不需要函数名称。它们总是使用变量名来调用(调用)。

上面的函数以分号结尾,因为它是可执行语句的一部分。



Function() 构造函数

正如您在前面的示例中所看到的,JavaScript 函数是使用function关键字。

还可以使用名为的内置 JavaScript 函数构造函数来定义函数Function()

示例

const myFunction = new Function("a", "b", "return a * b");

let x = myFunction(4, 3);
亲自试一试 »

您实际上不必使用函数构造函数。上面的例子和下面的写法是一样的:

示例

const myFunction = function (a, b) {return a * b};

let x = myFunction(4, 3);
亲自试一试 »

大多数时候,您可以避免使用newJavaScript 中的关键字。


功能提升

在本教程的前面部分,您了解了 "hoisting" (JavaScript 提升)。

提升是 JavaScript 的默认移动行为声明到当前范围的顶部。

提升适用于变量声明和函数声明。

因此,JavaScript 函数可以在声明之前调用:

myFunction(5);

function myFunction(y) {
  return y * y;
}

使用表达式定义的函数不会被提升。


自调用函数

函数表达式可以做成"self-invoking"。

自调用表达式会自动调用(启动),无需被调用。

如果表达式后面跟有(),函数表达式将自动执行。

您不能自调用函数声明。

您必须在函数周围添加括号以表明它是函数表达式:

示例

(function () {
  let x = "Hello!!";  // I will invoke myself
})();
亲自试一试 »

上面的函数实际上是一个匿名自调用函数(没有名称的函数)。


函数可以用作值

JavaScript 函数可以用作值:

示例

function myFunction(a, b) {
  return a * b;
}

let x = myFunction(4, 3);
亲自试一试 »

JavaScript 函数可以在表达式中使用:

示例

function myFunction(a, b) {
  return a * b;
}

let x = myFunction(4, 3) * 2;
亲自试一试 »

函数是对象

这个typeofJavaScript 中的运算符对于函数返回 "function"。

但是,JavaScript 函数最好被描述为对象。

JavaScript 函数两者兼而有之特性方法

这个arguments.length属性返回调用函数时收到的参数数量:

示例

function myFunction(a, b) {
  return arguments.length;
}
亲自试一试 »

这个toString()方法以字符串形式返回函数:

示例

function myFunction(a, b) {
  return a * b;
}

let text = 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 或更早版本不支持箭头函数。