3.4.2 给函数提供信息

如果函数能接收到信息就更有用了。回想一下你的助手,那个为你买披萨饼的人。3.4节所描述的最初的“函数”只是说明了如何找到披萨店,指示要购买一块披萨饼然后返回办公室。当你想要某一块披萨饼,就通过告诉助手“买一块披萨饼”来“调用”这个函数。当然,根据你的口味,你可能想要意大利香肠披萨饼、奶酪披萨饼或者橄榄披萨饼。要让你的指令更为灵活,可以告诉助手你喜欢什么类型的披萨。每次你需要一块披萨的时候,可以指定不同的类型。

JavaScript函数也可以接收信息,这种信息叫做参数,函数使用它们来执行操作。例如,如果想要创建一个函数来计算某人购物车的总金额,那么,这个函数需要知道每件商品的价格,以及每件商品订购的数量。

当创建这个函数的时候,在圆括号内放置一个新的变量的名字,这就是参数。基本结构如下所示:


function functionName(parameter){

//the JavaScript you want to run

}


这个参数只是一个变量,因此,我们提供任何有效的变量名(参见2.4.1节关于命名变量的提示)。例如,假设每次要在Web页面显示内容的时候,都想要减少键盘录入。我们创建一个简单的函数,使用一个更短的名字来替换Web浏览器的document.write()函数:


function print(message){

document.write(message);

}


这个函数的名字是print,并且它还拥有一个名为message的参数。当调用这个函数的时候,它接收一些信息(要显示的消息),然后它使用document.write()函数把消息显示到页面。当然,函数在调用之前不会做任何事情,因此,在Web页面的某个地方,我们可以像下面这样调用函数:

print('Hello world.');

这段代码运行的时候,调用print函数并且把一些文本(字符串“Hello world.”)发送到函数,然后在页面上显示出“Hello world.”。从技术上讲,向函数发送消息的这个过程叫做“传递一个参数”。在这个例子中,文本“Hello world.”就是参数。

即便是像这样一个真正简单的函数,如果你是编程新手,事情何时发生以及如何发生的逻辑也有点儿容易令人混淆。下面是分解的每个步骤,如图3-7所示:

1.JavaScript解释器读入函数并存储到内存中。这个步骤只是准备Web浏览器稍后运行的函数。

2.调用该函数并且信息“Hello world.”传递给了函数。

3.传递给函数的信息存储在一个新的名为message的变量中。这个步骤等效于var message='Hello World.’。

4.最后,函数运行,在Web页面上显示变量message中存储的值。

3.4.2 给函数提供信息 - 图1

图 3-7 在使用函数的时候,通常在使用函数之前创建它。这里的print()函数在代码的前三行创建,但是,函数中的代码实际上到了最后一行才运行

函数并不仅限于单个参数。我们可以给一个函数传递任意多个参数。只需要在函数中指定每个参数,例如:


function functionName(parameter1,parameter2,parameter3){

//the JavaScript you want to run

}


然后,使用同样数目的参数,以同样的顺序来调用函数:

functionName(argument1,argument2,argument3);

在这个例子中,调用functionName的时候,参数argument1存储在parameter1中,argument2存储在parameter2中,以此类推。扩展上面的print函数,假设除了在Web页面上显示一条消息外,我们还想要指定一个HTML标签来包围消息。通过这种方式,可以把消息显示为一个标题或者一个段落。新的函数如下所示:


function print(message, tag){

document.write('<’+tag+’>’+message+’</’+tag+’>');

}


函数调用如下所示:


print('Hello world.’,'p');


在这个例子中,我们给函数传递了两个参数“Hello world.”和“p”。这些值存储在函数的两个变量中,即message和tag中。结果是一个新的段落,<p>Hello world.</p>显示在页面上。

不仅限于把字符串传递给函数,可以把任何类型的JavaScript变量或值传递给函数。例如,可以把数组、变量、值或一个Boolean值作为一个参数传递。