📄 js05.htm
字号:
<HTML>
<HEAD>
<TITLE>第五章 函数</TITLE>
<LINK rel="stylesheet" type="text/css" href="js.css">
</HEAD>
<BODY>
<H1><A name="第五章 函数">第五章 函数</A> <A href="index.htm">主目录</A></H1>
<HR>
<UL>
<LI><A href="#5.1 什么是函数">5.1 什么是函数</A></LI>
<LI><A href="#5.2 使用预定义函数">5.2 使用预定义函数</A></LI>
<LI><A href="#5.3 函数定义和函数调用">5.3 函数定义和函数调用</A><UL>
<LI><A href="#5.3.1 函数定义">5.3.1 函数定义</A></LI>
<LI><A href="#5.3.2 函数调用">5.3.2 函数调用</A></LI>
</UL>
</LI>
<LI><A href="#5.4 函数参数的使用">5.4 函数参数的使用</A><UL>
<LI><A href="#5.4.1 给函数添加参数">5.4.1 给函数添加参数</A></LI>
<LI><A href="#5.4.2 使用多个参数">5.4.2 使用多个参数</A></LI>
</UL>
</LI>
<LI><A href="#5.5 使用函数返回值">5.5 使用函数返回值</A><UL>
<LI><A href="#5.5.1 给函数添加返回值">5.5.1 给函数添加返回值</A></LI>
<LI><A href="#5.5.2 区分函数和过程">5.5.2 区分函数和过程</A></LI>
</UL>
</LI>
<LI><A href="#5.6 函数的嵌套调用">5.6 函数的嵌套调用</A><UL>
<LI>5<A href="#5.6.1 函数嵌套调用的形式">.6.1 函数嵌套调用的形式</A></LI>
<LI><A href="#5.6.2 解决嵌套调用引起的效率问题">5.6.2 解决嵌套调用引起的效率问题</A></LI>
</UL>
</LI>
<LI><A href="#5.7 递归函数">5.7 递归函数</A></LI>
<LI><A href="#5.8 变量的作用域">5.8 变量的作用域</A><UL>
<LI><A href="#5.8.1 全局变量和局部变量">5.8.1 全局变量和局部变量</A></LI>
<LI><A href="#5.8.2 使用局部变量避免冲突">5.8.2 使用局部变量避免冲突</A></LI>
</UL>
</LI>
</UL>
<H2><A name="5.1 什么是函数">5.1 什么是函数</A>
<A href="#第五章 函数">(目录)</A></H2>
<UL>
<LI>函数是较大程序中的一个小程序。执行一项单一任务或一系列任务。</LI>
<LI>好处<UL>
<LI>重用性。</LI>
<LI>降低程序的复杂度。</LI>
</UL>
</LI>
<LI>形式上,函数是已命名的代码块,代码块中的语句作为一个整体引用和执行。函数可以参数、返回值。</LI>
</UL>
<H2><A name="5.2 使用预定义函数">5.2 使用预定义函数</A>
<A href="#第五章 函数">(目录)</A></H2>
<UL>
<LI>使用JavaScript的预定义函数。可提高编程效率。</LI>
</UL>
<H4>1.eval()函数</H4>
<UL>
<LI>计算字符串表达式的值,如:x =eval("123*321/9")</LI>
<LI><A href="sample/s05_01.htm">例5.1</A>,求用户在提示对话框中输入的任意常量表达式。</LI>
</UL>
<H4>2.escape()、unescape()函数</H4>
<UL>
<LI>escape()将字符串中的非字母数字字符转换为按格式%XX表示的数字。如:</LI>
</UL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P>var str="Tom & Jerry Show";<BR>
var escapestr=escape("Tom & Jerry Show");</P>
</BLOCKQUOTE>
</BLOCKQUOTE>
<P>结果为“Tom%20%26%20Jerry%20Show”。</P>
<UL>
<LI>unescape()函数将字符串中格式为“%XX”的数字转换为字符。如:</LI>
</UL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P>var str="Tom%20%26%20Jerry%20Show";<BR>
var unescapestr=unescape(str);</P>
</BLOCKQUOTE>
</BLOCKQUOTE>
<P>结果为“Tom & Jerry Show”。</P>
<H4>3.isNaN ()、isFinite()函数</H4>
<UL>
<LI>isNaN函数确定一个变量是否是NaN,如果是,则返回true,否则返回false。</LI>
<LI>
isFinite()函数用于确定一个变量是否有限。如isFinite(1)、isFinite(true)返回true,而isFinite(“a”)返回false。</LI>
</UL>
<H4>4.parseFloat()、parseInt()函数</H4>
<UL>
<LI>
parseFloat()将字符串开头的整数或浮点数分解出来,转换为浮点数。如,parseFloat(“123.45”)、parseFloat(“123.45abc”)返回浮点数123.45,而parseFloat(“abc123.45”)和parseFloat(true)返回NaN。</LI>
<LI>
parseInt()将字符串开头的整数分解出来,转换为整数。如,parseInt(“123”)、parseInt(“123.45”)、parseInt(“123.45abc”)都返回整数123,而parseInt(“abc123”)和parseInt(true)返回NaN。</LI>
</UL>
<H2><A name="5.3 函数定义和函数调用">5.3 函数定义和函数调用</A>
<A href="#第五章 函数">(目录)</A></H2>
<H3><A name="5.3.1 函数定义">5.3.1 函数定义</A>
<A href="#第五章 函数">(目录)</A></H3>
<UL>
<LI>定义格式:</LI>
</UL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P>function 自定义函数名()<BR>
{<BR>
函数体<BR>
}</P>
</BLOCKQUOTE>
</BLOCKQUOTE>
<UL>
<LI>在同一个页面中的两个函数不能同名。</LI>
<LI>函数定义通常放在<HEAD></HEAD>标记之间,确保函数先定义后使用。</LI>
<LI><A href="sample/S05_02.htm">例5.2</A>,定义一个函数Hello(),这个函数的功能是在页面中输出文字“您好!”。</LI>
</UL>
<H3><A name="5.3.2 函数调用">5.3.2 函数调用</A>
<A href="#第五章 函数">(目录)</A></H3>
<UL>
<LI>调用形式“函数名()”,如:</LI>
</UL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P>Hello();</P>
</BLOCKQUOTE>
</BLOCKQUOTE>
</BLOCKQUOTE>
<UL>
<LI><A href="sample/S05_03.htm">例5.3</A>,通过函数调用在页面中输出文字“您好!”。</LI>
<LI>流程:</LI>
</UL>
<P align="center"><IMG border="0" src="js_05_01.gif" width="466" height="133"></P>
<H2 align="left"><A name="5.4 函数参数的使用">5.4 函数参数的使用</A>
<A href="#第五章 函数">(目录)</A></H2>
<H3 align="left"><A name="5.4.1 给函数添加参数">5.4.1 给函数添加参数</A>
<A href="#第五章 函数">(目录)</A></H3>
<UL>
<LI>
<P align="left">定义函数的完整格式:</LI>
</UL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P align="left">function 自定义函数名(形参1,形参2...)<BR>
{<BR>
函数体<BR>
}</P>
</BLOCKQUOTE>
</BLOCKQUOTE>
<UL>
<LI>
<P align="left">定义函数时指定的参数称为形式参数,简称形参;</LI>
<LI>
<P align="left">把调用函数时实际传递的值称为实际参数,简称实参。</LI>
<LI>
<P align="left">调用形式:</LI>
</UL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P align="left">函数名(实参1,实参2...)</P>
</BLOCKQUOTE>
</BLOCKQUOTE>
<UL>
<LI>
<P align="left"><A href="sample/S05_04.htm">例5.4</A>,定义一个含有参数的函数Show(text),它把参数text中的字符串显示在页面上。</LI>
</UL>
<H3 align="left"><A name="5.4.2 使用多个参数">5.4.2 使用多个参数</A>
<A href="#第五章 函数">(目录)</A></H3>
<UL>
<LI>
<P align="left">当使用多个参数时,函数调用所给出的各个实参按照其排列的先后顺序依次传递给函数定义中的形参。</LI>
<LI>
<P align="left"><A href="sample/S05_05.htm">例5.5</A>,在页面上输出一些字体大小不一的文字。</LI>
</UL>
<H2 align="left"><A name="5.5 使用函数返回值">5.5 使用函数返回值</A>
<A href="#第五章 函数">(目录)</A></H2>
<UL>
<LI>
<P align="left">函数可以返回值。</LI>
</UL>
<H3 align="left"><A name="5.5.1 给函数添加返回值">5.5.1 给函数添加返回值</A>
<A href="#第五章 函数">(目录)</A></H3>
<UL>
<LI>
<P align="left">使用return语句返回值:</LI>
</UL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P align="left">return 表达式;</P>
</BLOCKQUOTE>
</BLOCKQUOTE>
<UL>
<LI>
<P align="left">这条语句的作用是结束函数,并把其后的表达式的值作为函数的返回值。</LI>
<LI>
<P align="left"><A href="sample/S05_06.htm">例5.6</A>,编写一个求两个数中的最大值的函数Max(x,y)。</LI>
<LI>
<P align="left">return 语句也可以不带表达式:</LI>
</UL>
<BLOCKQUOTE>
<BLOCKQUOTE>
<P align="left">return;//它返回值undefined。</P>
</BLOCKQUOTE>
</BLOCKQUOTE>
<UL>
<LI>
<P align="left">在JavaScript中,每个函数都会返回值。如果一个函数没有执行return语句,那么也会返回undefined。</LI>
</UL>
<H3 align="left"><A name="5.5.2 区分函数和过程">5.5.2 区分函数和过程</A>
<A href="#第五章 函数">(目录)</A></H3>
<UL>
<LI>
<P align="left">把只返回undefined的函数称为过程。</LI>
<LI>
<P align="left">区别:过程调用单独构成一条语句;而函数调用可以出现在表达式中。</LI>
<LI>
<P align="left"><A href="sample/S05_07.htm">例5.7</A>,编写函数IsPrime(p)判断用户输入的一个数是否为素数</LI>
</UL>
<H2 align="left"><A name="5.6 函数的嵌套调用">5.6 函数的嵌套调用</A>
<A href="#第五章 函数">(目录)</A></H2>
<H3 align="left"><A name="5.6.1 函数嵌套调用的形式">5.6.1 函数嵌套调用的形式</A>
<A href="#第五章 函数">(目录)</A></H3>
<UL>
<LI>
<P align="left">在一个函数定义的函数体中出现对另一个函数的调用,这就是所谓的函数嵌套调用。</LI>
<LI>
<P align="left">如以下f()调用g():</LI>
</UL>
<P align="center"><IMG border="0" src="js_05_02.gif" width="301" height="112"></P>
<UL>
<LI>
<P align="left"><A href="sample/S05_08.htm">例5.8</A>,输入1个数n,求1+(1+2)+(1+2+3)+…+(1+2+…+n)的值。</LI>
<LI>
<P align="left">利用函数嵌套调用机制可简化问题的求解,并且使编写出来的程序结构性比较好,程序代码易于读懂。</LI>
</UL>
<H3 align="left"><A name="5.6.2 解决嵌套调用引起的效率问题">5.6.2 解决嵌套调用引起的效率问题</A>
<A href="#第五章 函数">(目录)</A></H3>
<UL>
<LI>
<P align="left">有时,当采用多个函数进行实现时,可能会引起程序运行效率不高的问题。</LI>
<LI>
<P align="left"><A href="sample/S05_09.htm">例5.9</A>,只使用一条循环语句求1+(1+2)+(1+2+3)+…+(1+2+…+n)的值。</LI>
<LI>
<P align="left">可读性和运行效率都是编写高质量软件的要素。对于初学者,要优先考虑程序的可读性,把程序写好写对是第一位的。</LI>
</UL>
<H2 align="left"><A name="5.7 递归函数">5.7 递归函数</A>
<A href="#第五章 函数">(目录)</A></H2>
<UL>
<LI>
<P align="left">在一个函数定义的函数体中出现对自身函数的调用,称为递归函数。</LI>
<LI>
<P align="left">
递归函数的引入来自于我们对问题的递归解决方法。比如,阶乘的递归定义:对于n!,如果n<=1,那么n!=1;否则n!=n*(n-1)!。</LI>
<LI>
<P align="left"><A href="sample/S05_10.htm">例5.10</A>,设计一个递归函数求阶乘n!的值。</LI>
<LI>
<P align="left">在递归函数中有两个必不可少的要素:<UL>
<LI>
<P align="left">1.有一个测试是否继续递归调用的条件。</LI>
<LI>
<P align="left">2.有一个递归调用的语句</LI>
</UL>
</LI>
<LI>
<P align="left"><A href="sample/S05_11.htm">例5.11</A>,输入两个非负整数,编程求出它们的最大公约数。求两数m,n最大公约数的递归算法是:如果m能够被n整除,那么n就是最大公约数;否则先求出m整除n后的余数q,然后求出除数n和余数q的最大公约数就是m和n的最大公约数。</LI>
</UL>
<H2 align="left"><A name="5.8 变量的作用域">5.8 变量的作用域</A>
<A href="#第五章 函数">(目录)</A></H2>
<UL>
<LI>
<P align="left">变量的的作用域是指变量起作用的范围,在该范围内可引用该变量。</LI>
<LI>
<P align="left">变量的的作用域取决于这个变量是哪一种变量。</LI>
</UL>
<H3 align="left"><A name="5.8.1 全局变量和局部变量">5.8.1 全局变量和局部变量</A>
<A href="#第五章 函数">(目录)</A></H3>
<UL>
<LI>
<P align="left">全局变量在所有函数之外定义,其作用域范围是同一个页面文件中的所有脚本;</LI>
<LI>
<P align="left">局部变量是定义在函数体之内(也包括形参变量),只对该函数是可见的,而对其他函数则是不可见的。</LI>
<LI>
<P align="left"><A href="sample/S05_12.htm">例5.12</A>,阅读程序,理解全局变量的作用域。</LI>
<LI>
<P align="left"><A href="sample/S05_13.htm">例5.13</A>,函数double中定义了局部变量x,同时在第2个<SCRIPT>脚本块中未经定义地使用了x(因此作为全局变量),而这两个变量名并没有发生冲突。</LI>
</UL>
<H3 align="left"><A name="5.8.2 使用局部变量避免冲突">5.8.2 使用局部变量避免冲突</A>
<A href="#第五章 函数">(目录)</A></H3>
<UL>
<LI>
<P align="left"><A href="sample/S05_14.htm">例5.14</A>,在页面中显示1~100之间的所有素数,并且控制每行显示5个素数。</LI>
</UL>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -