JAVASCRIPT 基础教程
JAVASCRIPT & DOM
JAVASCRIPT & BOM
JAVASCRIPT 高级教程
JAVASCRIPT 示例
JAVASCRIPT 参考

JavaScript 函数

在本教程中,您将学习如何在 JavaScript 中定义和调用函数。

什么是函数?

函数是一组执行特定任务的语句,可以与主程序分开保存和维护。 函数提供了一种创建可重用代码包的方法,这些代码包更便携且更易于调试。 以下是使用函数的一些优点:

  • 函数减少了程序中代码的重复 — 函数允许您将常用的代码块提取到单个组件中。 现在,您可以通过在脚本中的任意位置调用此函数来执行相同的任务,而无需一次又一次地复制和粘贴相同的代码块。
  • 函数使代码更易于维护 — 由于一次创建的函数可以多次使用,因此函数内部所做的任何更改都会自动在所有地方实现,而无需触及几个文件。
  • 函数更容易消除错误 —当程序被细分为函数时,如果发生任何错误,您就可以确切地知道是什么函数导致了错误以及在哪里找到它。 因此,修复错误变得容易得多。

以下部分将向您展示如何在脚本中定义和调用函数。

定义和调用函数

函数的声明以 function 关键字开头,然后是您要创建的函数的名称,然后是括号,即 (),最后放置您的 大括号 {} 之间的函数代码。 以下是声明函数的基本语法:

function functionName() {
    // 要执行的代码
}

这是一个简单的函数示例,它将显示一条 hello 消息:

// 定义函数
function sayHello() {
    alert("Hello, welcome to this website!");
}
 
// 调用函数
sayHello(); // 输出: Hello, welcome to this website!

一旦定义了一个函数,就可以从文档中的任何位置调用(调用)它,方法是键入它的名称,后跟一组括号,例如上面示例中的 sayHello()

注意: 函数名必须以字母或下划线字符开头,不能以数字开头,可选地后跟多个字母、数字或下划线字符。 函数名区分大小写,就像变量名一样。


向函数添加参数

您可以在定义函数以在运行时接受输入值时指定参数。 参数的作用类似于函数中的占位符变量; 它们在运行时被调用时提供给函数的值(称为参数)替换。

参数设置在函数的第一行括号内,如下所示:

function functionName(parameter1, parameter2, parameter3) {
    // 要执行的代码
}

以下示例中的 displaySum() 函数将两个数字作为参数,只需将它们相加,然后在浏览器中显示结果。

// 定义函数
function displaySum(num1, num2) {
    var total = num1 + num2;
    alert(total);
}
 
// 调用函数
displaySum(6, 20); // 输出: 26
displaySum(-5, 17); // 输出: 12

您可以定义任意数量的参数。 但是,对于您指定的每个参数,在调用函数时都需要将相应的参数传递给函数,否则其值将变为 undefined。 让我们考虑以下示例:

// 定义函数
function showFullname(firstName, lastName) {
    alert(firstName + " " + lastName);
}
 
// 调用函数
showFullname("Clark", "Kent"); // 输出: Clark Kent
showFullname("John"); // 输出: John undefined

函数参数的默认值 ES6

使用 ES6,现在您可以为函数参数指定默认值。 这意味着如果在调用函数时没有为函数提供参数,则将使用这些默认参数值。 这是 JavaScript 中最受期待的特性之一。 这是一个例子:

function sayHello(name = 'Guest') {
    alert('Hello, ' + name);
}

sayHello(); // 输出: Hello, Guest
sayHello('John'); // 输出: Hello, John

在 ES6 之前,为了达到同样的效果,我们必须编写如下代码:

function sayHello(name) {
    var name = name || 'Guest'; 
    alert('Hello, ' + name);
}

sayHello(); // 输出: Hello, Guest
sayHello('John'); // 输出: Hello, John

要了解其他 ES6 功能,请查看 JavaScript ES6 功能章节。


从函数返回值

函数可以使用 return 语句将值返回给调用该函数的脚本。 该值可以是任何类型,包括数组和对象。

return 语句通常作为函数的最后一行放在右大括号之前,并以分号结束,如下例所示。

// 定义函数
function getSum(num1, num2) {
    var total = num1 + num2;
    return total;
}
 
// 显示返回值
alert(getSum(6, 20)); // 输出: 26
alert(getSum(-5, 17)); // 输出: 12

一个函数不能返回多个值。 但是,您可以通过返回 数组 值来获得类似的结果,如下例所示。

// 定义函数
function divideNumbers(dividend, divisor){
    var quotient = dividend / divisor;
    var arr = [dividend, divisor, quotient];
    return arr;
}
 
// 将返回值存储在变量中
var all = divideNumbers(10, 2);
 
// 显示单个值
alert(all[0]); // 输出: 10
alert(all[1]); // 输出: 2
alert(all[2]); // 输出: 5

使用函数表达式

我们之前用来创建函数的语法称为函数声明。 还有另一种用于创建函数的语法,称为函数表达式。

// 函数声明
function getSum(num1, num2) {
    var total = num1 + num2;
    return total;
}
 
// 函数表达式
var getSum = function(num1, num2) {
    var total = num1 + num2;
    return total;
};

一旦函数表达式存储在变量中,该变量就可以用作函数:

var getSum = function(num1, num2) {
    var total = num1 + num2;
    return total;
};
 
alert(getSum(5, 10)); // 输出: 15
 
var sum = getSum(7, 25);
alert(sum); // 输出: 32

注意: 在函数声明中,不需要在右大括号之后放置分号。 但另一方面,函数表达式应始终以分号结尾。

提示: 在 JavaScript 中,函数可以存储在变量中,作为参数传递给其他函数,作为返回值从函数传递出去,并在运行时构造。

函数声明函数表达式的语法看起来非常相似,但它们的求值方式不同,请查看以下示例:

declaration(); // 输出: Hi, I'm a function declaration!
function declaration() {
    alert("Hi, I'm a function declaration!");
}
 
expression(); // 未捕获的类型错误:未定义不是函数
var expression = function() {
    alert("Hi, I'm a function expression!");
};

在上面的例子中可以看到,函数表达式在定义之前被调用时抛出了异常,但函数声明执行成功。

JavaScript 在程序执行前解析声明函数。 因此,程序是否在定义之前调用该函数并不重要,因为 JavaScript 在幕后的当前作用域顶部有 提升函数。 函数表达式在分配给变量之前不会被计算; 因此,调用时它仍然是未定义的。

ES6 引入了更短的语法来编写称为 箭头函数 的函数表达式,请查看 JavaScript ES6 特性 章节以了解更多信息。


了解变量作用域

但是,您可以在 JavaScript 中的任何位置声明变量。 但是,声明的位置决定了变量在 JavaScript 程序中的可用性范围,即可以使用或访问变量的位置。 这种可访问性称为变量作用域

默认情况下,函数内声明的变量具有局部作用域,这意味着无法从该函数外部查看或操作它们,如下例所示:

// 定义函数
function greetWorld() {
    var greet = "Hello World!";
    alert(greet);
}
 
greetWorld(); // 输出: Hello World!
 
alert(greet); // Uncaught ReferenceError: greet is not defined

但是,在函数外部的程序中声明的任何变量都具有全局作用域,即它对所有脚本都可用,无论该脚本是在函数内部还是外部。 这是一个例子:

var greet = "Hello World!";
 
// 定义函数
function greetWorld() {
    alert(greet);
}
 
greetWorld();  // 输出: Hello World!
 
alert(greet); // 输出: Hello World!
Advertisements