5.3 定义和使用函数
如果像代码清单5-2中那样在script元素中直接定义语句,那么浏览器一遇到这些语句就会执行它们。也可以把几条语句包装在一个函数中,浏览器只有在遇到一条调用该函数的语句时才会执行它。如代码清单5-3所示。
代码清单5-3 定义JavaScript函数
<! DOCTYPE HTML> <html> <head> <title>Example</title> </head> <body> <script type="text/javascript"> function myFunc() { document.writeln("This is a statement"); }; myFunc(); </script> </body> </html>
函数所含语句被包围在一对大括号({和})之间,称为代码块。这个代码清单定义了一个名为myFunc的函数,其代码块中只含有一条语句。JavaScript是区分大小写的语言,因此function这个关键字必须小写。只有在浏览器遇到下面这样一条调用myFunc函数的语句时,该函数中的语句才会执行。
myFunc();
这个例子没什么特别的用处,因为在函数定义之后就立即调用了它。本章后面讲到事件的时候,所用例子中的函数要有用得多。
5.3.1 定义带参数的函数
与大多数语言一样,JavaScript中也可以为函数定义参数,如代码清单5-4所示。
代码清单5-4 定义带参数的函数
<! DOCTYPE HTML> <html> <head> <title>Example</title> </head> <body> <script type="text/javascript"> function myFunc(name, weather) { document.writeln("Hello " + name + "."); document.writeln("It is " + weather + " today"); }; myFunc("Adam", "sunny"); </script> </body> </html>
这里为myFunc函数添加了两个参数:name和weather。JavaScript是门弱类型语言,所以定义函数的时候不必声明参数的数据类型。本章稍后讲JavaScript变量的时候会回头解释弱类型的事情。调用带参数的函数时要像这样提供相应的值作为参数:
myFunc("Adam", "sunny");
这个代码清单的输出结果如下:
Hello Adam. It is sunny today
调用函数时提供的参数数目不必与函数定义中的参数数目相同。如果提供的参数值更少,那么所有未提供值的参数的值均为undefined。如果提供的参数值更多,那么多出的值会被忽略。其结果是,要想定义两个同名但参数数目不同的函数,然后让JavaScript根据调用函数时提供的参数值数目确定所调用的函数是不可能的。要是定义了两个同名的函数,那么第二个定义将会取代第一个。
5.3.2 定义会返回结果的函数
可以用return关键字从函数中返回结果,代码清单5-5示范了一个这样的函数。
代码清单5-5 从函数中返回结果
<! DOCTYPE HTML> <html> <head> <title>Example</title> </head> <body> <script type="text/javascript"> function myFunc(name) { return ("Hello " + name + "."); }; document.writeln(myFunc("Adam")); </script> </body> </html>
本例中的函数定义了一个参数并用它生成一个简单的结果。脚本中的最后一条语句调用了这个函数并将结果作为参数传递给document.writeln函数。如下所示:
document.writeln(myFunc("Adam"));
注意,定义这个函数时不用声明它会返回结果,也不用声明结果的数据类型。代码清单的输出结果如下所示:
Hello Adam.