JavaScript函数定义



JavaScript 函数使用 function 关键字来 定义

你可以使用一个函数 声明 或者一个函数 表达式.


函数声明

在本教程中,您了解了以下语法声明函数:

function functionName(parameters) {
  code to be executed
}

声明一个函数不会立即执行。它们被“保存以供稍后使用”,稍后将被执行,当它们被调用(call)。

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);

让我试试

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

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

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


Function() 构造函数

正如你在前面的例子中看到的,JavaScript函数使用function关键字定义。

函数还可以用一个内置的叫做Function()的构造函数来定义。

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

var x = myFunction(4, 3);

让我试试

您实际上不必使用函数构造函数。上面的例子也可以写成这样:

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

var x = myFunction(4, 3);

让我试试

大多数时候,你可以避免使用 new 关键词在JavaScript


Function 提升

在本教程中,你了解了 "hoisting".

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

Hoisting 适用于变量声明和函数声明。

正因为如此,JavaScript函数可以调用之前就被声明:

myFunction(5);

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

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


自调用函数

函数表达式可以进行“自调用”。

自动调用一个自调用表达式(自动启动),而不必调用.

函数表达式将自动执行,如果表达式随后 ().

你不能自调用一个函数声明.

您必须在函数的周围添加圆括号,以指示它是函数表达式:

(function () {
    var x = "Hello!!";      // I will invoke myself
})();

让我试试

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


函数可以用作值

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) * 2;

让我试试


函数是对象

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();

让我试试

定义为对象属性的函数称为对象的方法。为创建新对象而设计的函数称为对象构造函数.