Menu Close

JavaScript 函数 Functions

在脚本的许多地方,我们经常需要执行类似的操作。

例如,当访客登录、登出,或在其他场景中,我们可能都需要显示一条漂亮的消息。

函数是程序的主要“构建块”。它们允许我们多次调用相同的代码,而无需重复书写。JavaScript 中的函数是可以定义并在需要时调用的代码片段。它们可以被看作是程序中的子程序。

函数非常有用,因为它们允许程序员只编写一次代码,然后在程序中多次重复使用,从而减少代码重复。同时,函数也使程序员能够创建逻辑上独立的代码段,这些代码段可以与程序中的其他部分区分开来。如果需要更详细的了解函数,可参考C语言的函数介绍

我们已经见过一些内建函数的例子,比如 alert(message)prompt(message, default)confirm(question)。但我们也可以创建自己的函数。

函数具有以下特点:

  • 可以接受零个或多个参数

  • 可以在函数调用结束时返回一个指定的值

  • 即使不返回值,也可以对程序的其他部分产生副作用

JavaScript 函数 Functions
JavaScript 函数 Functions

函数声明

要创建一个函数,我们可以使用函数声明的方式。

它的语法如下:

function showMessage() {
  alert( 'Hello everyone!' );
}

function 关键字写在最前面,然后是函数的名称,接着是括号中的参数列表(用逗号分隔,上面的例子中是空的,稍后我们会看到带参数的例子),最后是函数的代码,也称为“函数体”,包裹在花括号中。

function name(parameter1, parameter2, ... parameterN) {
 // body
}

我们可以通过函数名 showMessage() 来调用新函数。

例如:

function showMessage() {
  alert( 'Hello everyone!' );
}

showMessage();
showMessage();

调用 showMessage() 会执行该函数的代码。在这个例子中,我们会看到这条消息出现两次。

这个例子清楚地展示了函数的主要用途之一:避免代码重复。

如果我们需要更改消息的内容或显示方式,只需修改一个地方:输出消息的那个函数。

局部变量

在函数内部声明的变量只能在该函数内部访问。

例如:

function showMessage() {
  let message = "Hello, I'm JavaScript!"; // local variable

  alert( message );
}

showMessage(); // Hello, I'm JavaScript!

alert( message ); // <-- Error! The variable is local to the function

外部变量

函数也可以访问外部的变量,例如:

let userName = 'John';

function showMessage() {
  let message = 'Hello, ' + userName;
  alert(message);
}

showMessage(); // Hello, John

函数可以完全访问外部变量,也可以修改它。

例如:

let userName = 'John';

function showMessage() {
  userName = "Bob"; // (1) changed the outer variable

  let message = 'Hello, ' + userName;
  alert(message);
}

alert( userName ); // John before the function call

showMessage();

alert( userName ); // Bob, the value was modified by the function

只有在函数内部没有声明同名的局部变量时,外部变量才会被使用。

如果在函数内部声明了一个同名的变量,它会遮蔽(shadow)外部的变量。例如,在下面的代码中,函数使用的是局部的 userName,外部的 userName 被忽略了:

let userName = 'John';

function showMessage() {
  let userName = "Bob"; // declare a local variable

  let message = 'Hello, ' + userName; // Bob
  alert(message);
}

// the function will create and use its own userName
showMessage();

alert( userName ); // John, unchanged, the function did not access the outer variable

全局变量

在任何函数外部声明的变量,比如上面代码中的外部 userName,称为全局变量。

全局变量可以在任何函数中访问(除非被局部变量遮蔽)。

最好尽量减少使用全局变量。现代代码中全局变量较少或没有。大多数变量都驻留在它们各自的函数中。不过,有时全局变量可以用来存储项目级别的数据。

参数

我们可以通过参数将任意数据传递给函数。

在下面的例子中,函数有两个参数:fromtext

function showMessage(from, text) { // parameters: from, text
  alert(from + ': ' + text);
}

showMessage('Ann', 'Hello!'); // Ann: Hello! (*)
showMessage('Ann', "What's up?"); // Ann: What's up? (**)

当函数在 (*) 和 (**) 行被调用时,传入的值会被复制到局部变量 fromtext 中。然后,函数使用这些局部变量。

这是另一个例子:我们有一个变量 from 并将其传递给函数。请注意:函数可以修改 from,但外部并不会看到这个变化,因为函数总是接收到值的副本:

function showMessage(from, text) {

  from = '*' + from + '*'; // make "from" look nicer

  alert( from + ': ' + text );
}

let from = "Ann";

showMessage(from, "Hello"); // *Ann*: Hello

// the value of "from" is the same, the function modified a local copy
alert( from ); // Ann

当一个值作为函数参数传递时,它也被称为实参。

READ  JavaScript 数据类型

换句话说,澄清这些术语的定义:

  • 参数 是在函数声明时括号内列出的变量(这是声明时的术语)。

  • 实参 是在调用函数时传递给函数的值(这是调用时的术语)。

我们声明函数时列出其参数,然后在调用时传递实参。

在上面的例子中,可以这样说:“showMessage 函数声明时有两个参数,然后在调用时传入了两个实参:from"Hello"。”

wer

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!
Posted in JavaScript 基础

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!