第2章 JavaScript语言基础(下)

来源:互联网 发布:unity3d游戏菜单制作 编辑:程序博客网 时间:2024/05/09 20:14

 2.8 核心语句

   前面讲述了JavaScript脚本语言数据结构方面的基础知识,包括基本数据类型,运算符,运算符优先级等,本节将重点介绍JavaScript脚本的核心语句。

2.8.1 基本处理流程

   在JavaScript里,基本的处理流程包含三种结构,即顺序结构,选择结构和循环结构。

2.8.2 if条件假设语句

    和java,c#语法结构一致。这就不多说了。

2.8.3 switch流程控制语句

   语法格式:

  1. switch(a)
  2. {
  3.    case a1:
  4.     statement 1;
  5.     [break;]
  6.    case a2;
  7.     statement 2;
  8.     [break;]
  9.    ......
  10.    default:
  11.     [statement n;]
  12. }

    快乐乔巴的观点

    这个语法大家肯定也不陌生,和Java,c++语法一致,但是C#中,每个分支case后必须使用“break”“goto”或者“return”来阻止穿越的发生,否则会出错。还有defaulet记得要写上,即使你认为条件肯定符合分支结构,这是防止error的好习惯~~

    考察源程序:

  1. <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
  2. "http://www.w3.org/TR/REC-html140/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>Sample Page!</title> 
  7. <script language="JavaScript" type="text/javascript">
  8. <!--
  9. var msg="/nswitch流程控制语句 : /n/n";
  10. //响应按钮的onclick事件处理程序
  11. function Test()
  12. {
  13.   var year=window. prompt("请输入您的军龄(整数值,0表示未参军) : ",25);
  14.   var army;
  15.   switch(year)
  16.   {
  17.     case 0:
  18.       army="平民";
  19.       break;
  20.     case 1:
  21.       army="列兵";
  22.       break;
  23.     case 2:
  24.       army="上等兵";
  25.       break;
  26.     case 3:
  27.     case 4:
  28.     case 5:
  29.       army="一级士官";
  30.       break;
  31.     case 6:
  32.     case 7:
  33.     case 8:
  34.       army="二级士官";
  35.       break;
  36.     default:
  37.       if (year>8)
  38.         army="中高级士官";
  39.   }
  40.   msg+="军龄 : "+year+"年/n";
  41.   msg+="结论 : "+army+"/n";
  42.   alert(msg);
  43. }
  44. -->
  45. </script>
  46. </head> 
  47. <body>
  48. <center>
  49. <form>
  50.   <input type=button value="测试" onclick="Test()">
  51. </form>
  52. </center>
  53. </body> 
  54. </html>

    2.8.4 for循环语句

    for循环语句大家也并不陌生,看个小例子:

  1. function Test()
  2. {
  3.    var iArray=new Array("JHX","QZY","LJY","HZF");
  4.    var iLength=iArray.length;
  5.    var msg="/nfor循环语句测试 :/n/n";
  6.    msg+="数组长度 : /n"+iLength+"/n";
  7.    msg+="数组元素 : /n";
  8.    for(var i=0;i<iLength;i++)
  9.    {
  10.      msg+="iArray["+i+"] ="+iArray[i]+" /n";
  11.    }
  12.    alert(msg);
  13. }

 2.8.5 while和do-while循环语句   

    这个也不多说了,看2个小例子大家就基本明白:

  1. function Test()
  2. {
  3.    var iCount=0;
  4.    var iArray=new Array("JHX","QZY","LJY","HZF");
  5.    var iLength=iArray.length;
  6.    var msg="/nwhile循环语句测试 :/n/n";
  7.    msg+="数组长度 : /n"+iLength+"/n";
  8.    msg+="数组元素 : /n";
  9.    while(iCount<iLength)
  10.    {
  11.      msg+="iArray["+iCount+"] ="+iArray[iCount]+" /n";
  12.      iCount+=1;
  13.    }
  14.    alert(msg);
  15. }

    希望至少执行一次statements语句(或语句块),可改用do...while语句,改写Test:

  1. function Test()
  2. {
  3.    var iCount=0;
  4.    var iArray=new Array("JHX","QZY","LJY","HZF");
  5.    var iLength=iArray.length;
  6.    var msg="/ndo-while循环语句测试 :/n/n";
  7.    msg+="数组长度 : /n"+iLength+"/n";
  8.    msg+="数组元素 : /n";
  9.    do{
  10.      msg+="iArray["+iCount+"] ="+iArray[iCount]+" /n";
  11.      iCount+=1;
  12.    }while(iCount<iLength)
  13.    alert(msg);
  14. }

    for,while,do...while三种循环语句具有基本相同的功能,在实际编程过程中,应根据实际需要和本着使程序简单易懂的原则来选择到底使用哪种循环语句。

2.8.6 使用break和continue进行循环控制

   在循环语句中,某些情况需要跳出循环或者跳出循环体内剩余语句,而直接执行下一次循环,此时需要通过break和continue语句来实现。break语句作用是立即跳出循环,continue语句的作用是停止正在进行的循环,而直接进入下一次循环。

    考察源程序2.15

  1. <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
  2. "http://www.w3.org/TR/REC-html140/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>Sample Page!</title> 
  7. <script language="JavaScript" type="text/javascript">
  8. <!--
  9. var msg="/n使用break和continue控制循环 : /n/n";
  10. //响应按钮的onclick事件处理程序
  11. function Test()
  12. {
  13.   var n=-1;
  14.   var iArray=new Array("YSQ","JHX","QZY","LJY","HZF","XGM","LJY","LHZ");
  15.   var iLength=iArray.length;
  16.   msg+="数组长度 : /n        "+iLength+"/n";
  17.   msg+="数组元素 : /n";
  18.   while(n<iLength)
  19.   {
  20.     n+=1;
  21.     if(n==3)
  22.       continue;
  23.     if(n==6)
  24.       break;
  25.     msg+="        iArray["+n+"] = "+iArray[n]+"/n";
  26.   }
  27.   alert(msg);
  28. }
  29. -->
  30. </script>
  31. </head> 
  32. <body>
  33. <center>
  34. <form>
  35.   <input type=button value="测试" onclick="Test()">
  36. </form>
  37. </center>
  38. </body> 
  39. </html>

2.7.7 with对象操作语句

    在编写JavaScript脚本过程中,经常需要引用同一对象的多个属性方法,正常的对象属性或方法的引用途径能达到既定的目的,但代码显得尤为复杂。JavaScript脚本语言提供了with操作语句来简化对象属性和方法的引用过程,其语法结构如下所示:

  1. with(object)
  2. {
  3.   statements;
  4. }

    例如下列连续引用document对象的write()方法的语句:

  1. document.write("Welcome to China");
  2. document.write("Welcome to Beijing");
  3. document.write("Welcome to Shanghai");

    可以使用with语句简化为:

  1. with(document)
  2. {
  3.   write("Welcome to China");
  4.   write("Welcome to Beijing");
  5.   write("Welcome to Shanghai");
  6. }

    在脚本代码中适当使用with语句可使脚本代码简明易懂,避免不必要得重复输入。若脚本代码中涉及多个对象,不推荐使用with语句,避免造成属性或方法引用的混乱。

2.8.8 使用for...in进行对象循环

    使用for...in循环语句可以对指定对象的属性和方法进行遍历,其语法结构如下所示:

  1. for(变量名 in 对象名)
  2. {
  3.   statements;
  4. }

    考察源程序2.16

  1. <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
  2. "http://www.w3.org/TR/REC-html140/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>Sample Page!</title> 
  7. <script language="JavaScript" type="text/javascript">
  8. <!--
  9. var msg="/nfor...in对象循环语句遍历对象 : /n/n";
  10. //响应按钮的onclick事件处理程序
  11. function Test()
  12. {
  13.   var i=0;
  14.   msg+="Window对象支持的属性和方法 : /n";
  15.   for(num in window)
  16.   {
  17.     msg+=num+"        ";
  18.     i+=1;
  19.     if((i%5)==0)
  20.       msg+="/n";
  21.   }
  22.   alert(msg);
  23. }
  24. -->
  25. </script>
  26. </head> 
  27. <body>
  28. <center>
  29. <form>
  30.   <input type=button value="测试" onclick="Test()">
  31. </form>
  32. </center>
  33. </body> 
  34. </html>

2.8.9 含标签的语句

    经常在循环标志前加上标签文本来引用该循环,其使用方法是在标识后面加冒号“:”。在综合运用break和continue语句控制循环转向时,可使用break或continue加上标识的形式使循环跳转到指定的位置。

    考察源程序2.17

  1. <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
  2. "http://www.w3.org/TR/REC-html140/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>Sample Page!</title> 
  7. <script language="JavaScript" type="text/javascript">
  8. <!--
  9. var msg="/n使用标签控制循环语句 : /n/n";
  10. //响应按钮的onclick事件处理程序
  11. function Test()
  12. {
  13.   msg+="循环流程 : /n";
  14.   outer:
  15.   for(m=1;m<4;m++)
  16.   {
  17.     msg+="        外循环  第"+m+"次/n";
  18.     for(n=1;n<4;n++)
  19.     {
  20.       if(n==2)
  21.         break outer;
  22.       msg+="            内循环  第"+n+"次/n";
  23.     }
  24.   }
  25.   alert(msg);
  26. }
  27. -->
  28. </script>
  29. </head> 
  30. <body>
  31. <center>
  32. <form>
  33.   <input type=button value="测试" onclick="Test()">
  34. </form>
  35. </center>
  36. </body> 
  37. </html>

    由例子可以看出,有多层循环的情况下,想从最里层跳出整个循环,outer标签对循环控制非常的有效。若配合break和continue语句使用,可精确控制循环的走向,在实际编写脚本代码过程中应根据需要选择是否添加标签。

2.9 函数

    JavaScript脚本语言允许开发者通过编写函数的方式组合一些可重复使用的脚本代码,增加了脚本代码的结构化和模块化。函数是通过参数接口进行数据传递,以实现特定的功能。本小节将重点介绍函数的基本概念,组成,全局函数与局部函数,作为对象的函数以及递归函数等知识,让读者从头开始,学习如何编写执行效率高,代码利用率高且易于查看和维护的函数。

2.9.1 函数的基本组成

    函数由函数定义和函数调用两部分组成,应首先定义函数,然后再进行调用,以养成良好的编程习惯。

    函数的定义应使用关键字function,其语法规则如下所示:

  1. function funcName([parameters])
  2. {
  3.   statements;
  4.   [return 表达式;]
  5. }

    函数的各个部分含义介绍如下。

    ● funcName 为函数名,函数名可由开发者自行定义,与变量的命名规则基本相同。

    ● parameters 为函数的参数,在调用目标函数时,需将实际数据传递给参数列表以完成函数特定的功能。参数列表中可定义一个或多个参数,各参数之间加逗号“,”分隔开来,当然,参数列表也可以为空。

    ● statements 为函数体,规定了函数的功能,本质上相当于一个脚本程序。

    ● return 指定函数的返回值,为可选参数。

    自定义函数一般放置在HTML文档的<head>和</head>标记对之间。除了自定义函数外,JavaScript脚本语言提供大量的内建函数,无需开发者定义即可直接调用,例如Window对象的alert()方法即为JavaScript脚本语言支持的内建函数。

    函数定义过程结束后,可在文档中任意位置调用该函数。引用目标函数时,只需在函数名后加上小括号即可。若目标函数需要引入参数,则应在小括号内添加传递参数。如果函数有返回值,可将最终结果赋值给一个自定义的变量并用关键字return返回。

    考察源程序2.18

  1. <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
  2. "http://www.w3.org/TR/REC-html140/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>Sample Page!</title> 
  7. <script language="JavaScript" type="text/javascript">
  8. <!--
  9. var msg="/n函数调用实例 : /n/n";
  10. //响应按钮的onclick事件处理程序
  11. function Test()
  12. {
  13.   var i=10;
  14.   var j=15;
  15.   var temp=sum(i,j);
  16.   msg+="函数参数 : /n";
  17.   msg+="        参数1:   i="+i+"/n";
  18.   msg+="        参数2:   j="+j+"/n";
  19.   msg+="调用语句 : /n";
  20.   msg+="         var temp=sum(i,j);/n";
  21.   msg+="返回结果 : /n";
  22.   msg+="        "+i+"+"+j+" = "+temp+"/n";
  23.   alert(msg);
  24. }
  25. //计算两个数的加和
  26. function sum(data1,data2)
  27. {
  28.   var tempData=data1+data2;
  29.   return tempData;
  30. }
  31. -->
  32. </script>
  33. </head> 
  34. <body>
  35. <center>
  36. <form>
  37.   <input type=button value="测试" onclick="Test()">
  38. </form>
  39. </center>
  40. </body> 
  41. </html>

    在上述代码中,定义了实现两数相加的函数sum(data1,data2)以及响应“测试”按钮onclick事件处理程序的Test()函数,并在后者内部调用Window对象的内建函数alert(),实现了函数的相互引用。

    如果函数中引用的外部函数较多或函数的功能很复杂,势必导致函数代码过长而降低脚本代码的可读性,违反了开发者使用函数实现特定功能的初衷。因此,在编写函数时,应尽量保持函数功能的单一性,使脚本代码结构清晰,简单易懂。

2.9.2 全局函数和局部函数

    JavaScript脚本语言提供了很多全局(内建)函数,在脚本编程过程中可以直接调用,在此外介绍四种简单的全局函数:parseInt(),parseFloat(),escape()和unescape()。

    parseInt()函数的作用是将字符串转换为整数;parseFloat()函数的作用是将字符串转换为浮点数;escape()函数的作用是将一些特殊字符转换成ASCII码;而unescape()函数的作用是将ASCII码转换成字符。

    考察源程序:

  1. <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
  2. "http://www.w3.org/TR/REC-html140/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>Sample Page!</title> 
  7. <script language="JavaScript" type="text/javascript">
  8. <!--
  9. var msg="/n全局函数调用实例 : /n/n";
  10. //响应按钮的onclick事件处理程序
  11. function Test()
  12. {
  13.   var string1="30121";                     
  14.   var string2="34.12";
  15.   var string3="Money*#100";
  16.   var temp1,temp2,temp3,temp4;
  17.   msg+="原始变量 : /n";
  18.   msg+="        string1 = "+string1+"    类型 : "+typeof(string1)+"/n";
  19.   msg+="        string2 = "+string2+"    类型 : "+typeof(string2)+"/n";
  20.   msg+="        string3 = "+string3+"    类型 : "+typeof(string3)+"/n";
  21.   msg+="执行语句与结果:/n";
  22.   temp1=parseInt(string1);
  23.   temp2=parseInt(string2);
  24.   msg+="        语句 : parseInt(string1)    结果 : string1="+temp1+"    类型 : "+typeof(temp1)+"/n";
  25.   msg+="        语句 : parseInt(string2)    结果 : string1="+temp2+"    类型 : "+typeof(temp2)+"/n";
  26.   temp1=parseFloat(string1);
  27.   temp2=parseFloat(string2);
  28.   msg+="        语句 : parseFloat(string1)    结果 : string1="+temp1+"    类型 : "+typeof(temp1)+"/n";
  29.   msg+="        语句 : parseFloat(string2)    结果 : string1="+temp2+"    类型 : "+typeof(temp2)+"/n";
  30.   temp3=escape(string3);
  31.   msg+="        语句 : temp3=escape(string3)    结果 : temp3="+temp3+"    类型 : "+typeof(temp3)+"/n";
  32.   temp4=unescape(temp3);
  33.   msg+="        语句 : temp4=unescape(temp3)    结果 : temp4="+temp4+"    类型 : "+typeof(temp4)+"/n";
  34.   alert(msg);
  35. }
  36. -->
  37. </script>
  38. </head> 
  39. <body>
  40. <center>
  41. <form>
  42.   <input type=button value="测试" onclick="Test()">
  43. </form>
  44. </center>
  45. </body> 
  46. </html>

    由程序运行结果可知上述全局函数的具体作用。当然JavaScript脚本语言还支持很多其他的全局函数,在编程中适当使用它们可大大提高编程效率。

    与全局函数相对应的函数是局部函数,即定义在某个特定函数内部,并仅能在其他内部使用函数。

    考察源程序2.20

  1. <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
  2. "http://www.w3.org/TR/REC-html140/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>Sample Page!</title> 
  7. <script language="JavaScript" type="text/javascript">
  8. <!--
  9. var msg="/n局部函数调用实例 : /n/n";
  10. //响应按钮的onclick事件处理程序
  11. function multi(m,n)
  12. {
  13.   var result;
  14.   function inner(m)  
  15.   {
  16.     if (m%2!=0)
  17.       return 0;
  18.     else
  19.       return 1;
  20.   }
  21.   result=inner(m)*n;
  22.   msg+="输入参数 : /n";
  23.   msg+="        m = "+m+"/n        n = "+n+"/n";
  24.   msg+="乘积结果 : /n";
  25.   msg+="        result = "+result+"/n";
  26.   alert(msg);
  27. }
  28. -->
  29. </script>
  30. </head> 
  31. <body>
  32. <center>
  33. <form>
  34.   <input type=button value="测试" onclick="multi(4,3)">
  35. </form>
  36. </center>
  37. </body> 
  38. </html>

    函数muni()内部定义了局部函数inner(),判断变量m是否为偶数,如果是偶数则返回1,否则返回0。根据调用语句muti(4,3),m=4为偶数,故局部函数inner()的返回值为1,函数muti()的返回值为3。

注意:通过上述方式定义的函数为局部函数,函数的作用域为其所属的框架函数,任何位于函数框架外部对该局部函数的引用均为不合法。

2.9.3 作为对象的函数

    JavaScript脚本语言中所有的数据类型,数组等均可作为对象,函数也不例外。可以使用new操作符和Function对象的构造函数Funciton()来生成指定规则的函数,其基本语法如下所示:

  1. var funcName = new Function(argument,statements;);

    值得注意的是,上述构造函数Function()首字母必须大写,同时函数的参数列表与操作代码之间使用逗号隔开。

    参考源程序2.21

  1. <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
  2. "http://www.w3.org/TR/REC-html140/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>Sample Page!</title> 
  7. <script language="JavaScript" type="text/javascript">
  8. <!--
  9. var msg="/n使用构造函数Function构造函数 : /n/n";
  10. var newFunc=new Function("result","alert(msg+'        '+result)");
  11. //响应按钮的onclick事件处理程序
  12. function Test()
  13.   msg+="生成语句: /n";
  14.   msg+="        var newFunc=new Function(''result'',''alert(msg+result)'');/n"
  15.   msg+="调用语句: /n";
  16.   msg+="        newFunc(''Welcome to JavaScript World!'');/n";
  17.   msg+="返回结果: /n";
  18.   newFunc("Welcome to JavaScript World!");
  19. }
  20. -->
  21. </script>
  22. </head> 
  23. <body>
  24. <center>
  25. <form>
  26.   <input type=button value="测试" onclick="Test()">
  27. </form>
  28. </center>
  29. </body> 
  30. </html>

    通过new操作符和Function()构造函数定义函数对象时,并没有给函数赋予名称,而是定义函数后直接将其赋值给变量newFunc,并通过newFunc进行访问,与通常的函数定义不同。

注意:在定义函数对象时,参数列表可以为空,也可有一个或多个参数,使用变量引用该函数时,应将函数执行所需要的参数传递给函数体。

    作为对象的函数,最重要的性质即为它可以创建静态变量,给函数增加实例属性,使得函数在被调用之前也能发挥作用。

    考察源程序2.22

  1. <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
  2. "http://www.w3.org/TR/REC-html140/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>Sample Page!</title> 
  7. <script language="JavaScript" type="text/javascript">
  8. <!--
  9. var msg="/n作为对象的函数创建静态变量 : /n/n";
  10. function sum(x,y)
  11. {
  12.   sum.result=sum.result+x+y;
  13.   return(sum.result);
  14. }
  15. sum.result=0;
  16. //响应按钮的onclick事件处理程序
  17. function Test()
  18.   var tempData;
  19.   msg+="调用语句及返回结果: /n";
  20.   tempData=sum(2,3);
  21.   msg+="        语句 : tempData=sum(2,3);";
  22.   msg+="        结果 : tempData = "+tempData+"    sum.result = "+sum.result+"/n";
  23.   tempData=sum(4,5);
  24.   msg+="        语句 : tempData=sum(4,5);";
  25.   msg+="        结果 : tempData = "+tempData+"    sum.result = "+sum.result+"/n";
  26.   tempData=sum(6,7);
  27.   msg+="        语句 : tempData=sum(6,7);";
  28.   msg+="        结果 : tempData = "+tempData+"    sum.result = "+sum.result+"/n";  
  29.   alert(msg);
  30. }
  31. -->
  32. </script>
  33. </head> 
  34. <body>
  35. <center>
  36. <form>
  37.   <input type=button value="测试" onclick="Test()">
  38. </form>
  39. </center>
  40. </body> 
  41. </html>

    由上述结果可以看出,作为对象的函数使用静态变量后,可以用来保存其运行的环境参数,如中间值等数据。

2.9.4 函数递归调用

    函数的递归调用即函数在定义时调用自身,考察源程序2.23

  1. <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.0//EN"
  2. "http://www.w3.org/TR/REC-html140/strict.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  6. <title>Sample Page!</title> 
  7. <script language="JavaScript" type="text/javascript">
  8. <!--
  9. var msg="/n函数的递归调用 : /n/n";
  10. //响应按钮的onclick事件处理程序
  11. function Test()
  12.   var result;
  13.   msg+="调用语句 : /n";
  14.   msg+="        result = sum(6);/n";
  15.   msg+="调用步骤 : /n";
  16.   result=sum(6);
  17.   msg+="计算结果 : /n";
  18.   msg+="        result = "+result+"/n";
  19.   alert(msg);
  20. }
  21. //计算当前步骤加和值
  22. function sum(m)
  23. {
  24.   if(m==0)
  25.     return 0;
  26.   else
  27.   {
  28.     msg+="        语句 : result = " +m+ "+sum(" +(m-1)+"); /n";
  29.     result=m+sum(m-1);
  30.   }
  31.   return result;
  32. }
  33. -->
  34. </script>
  35. </head> 
  36. <body>
  37. <center>
  38. <form>
  39.   <input type=button value="测试" onclick="Test()">
  40. </form>
  41. </center>
  42. </body> 
  43. </html>

    函数递归调用能使代码显得紧凑,简练,但也存在执行效率降低,容易出错,资源耗费较多等问题,推荐在递归调用次数较少的情况下使用该方法,而在需要多次递归调用的情况下使用其他方法来代替。

2.9.5 语言注释语句

    在JavaScript脚本代码中,可加入一些提示性的语句,以便提示代码的用途及跟踪程序执行的流程,并增加程序的可读性,同时有利于代码的后期维护。上述提示性语句称作语言注释语句。

    一般使用双反斜杠“//”作为每行解释语句的开头,例如:

    //程序解释语句

    对于多行的解释语句,可以在解释语句开头加上“/*”和末尾“*/”。

    /* 程序解释语句1

        程序解释语句2

        程序解释语句2 */

    在JavaScript脚本语言中,还允许使用HTML风格的语言注释,即用“<!--”来代替双反斜杠“//”。与HTML文档注释不同的是,HTML允许“<!--”跨越多行进行注释,而JavaScript脚本里必须在每行注释前加上“<!--”。另外,javaScript脚本里不需要以“-->”来结束注释语句,而HTML中则必须用“-->”来结束注释语句。

    为养成良好的编程习惯,最好不用HTML风格的语言注释语句,而使用双反斜杠“//”来加入单行注释语句,用“/*”和“*/”加入多行注释语句。

2.9.6 函数应用注意事项

    最后介绍下在使用函数过程中应特别予以注意的几个问题,以帮助读者更好,更准确地使用函数,并养成良好的编程习惯。具体表现在如下几点。

    ● 定义函数的位置:如果函数代码较为复杂,函数之间相互调用较多,应将所有函数的定义部分放在HTML文档的<head>和</head>标记对之间,即可保证所有的函数在调用之前均已定义,又可使开发者后期的维护工作更为简便。

    ● 函数的命名:函数的命名原则与变量的命名原则相同,但尽量不要将函数和变量取同一个名字。如因实际情况需要将函数和变量定义为相近的名字,也应给函数加上可以清楚辨认的字符(如前缀func等)以示区别。

    ● 函数返回值:在函数定义代码结束时,应使用return语句返回,即使函数不需要返回任何值。

    ● 变量的作用域:区分函数中使用的变量是全局变量还是局部变量,避免在调用过程中出现难以检查的错误。

    ● 函数注释:在编写脚本代码时,应在适当的地方给代码的特定行添加注释语句,例如将函数的参数设置,数据类型,返回值,功能等注释清楚,既方便开发者对程序的后期维护,也方便旗他人阅读该函数,便于模块化编程。

    ● 函数参数传递:由于JavaScript是弱类型语言,使用变量时并不检查其数据类型,导一个潜在的威胁,即开发者调用函数时,传递给函数的参数数量或数据类型不满足要求而导致错误的出现。在函数调用时,应仔细检查传递给目标函数的参数变量的数量和数据类型。

    其中第五点值得特别关注,因为由其导致的错误非常难于检测。考察如下两数乘法的测试代码:

  1. function multi(x,y)
  2. {
  3.   if(multi.arguments.length==2)
  4.     return (x*y);
  5. }

    以上代码检查了输入参数的数量,但未检查操作数的数据类型,例如输入字符串“num1”和“num2”,并调用multi(num1,num2)时,浏览器报错。修改函数multi()如下:

  1. function multi(x,y)
  2. {
  3.   if(multi.arguments.length==2)
  4.   {
  5.     if(typeof(x)!="number" || (typeof(y)!="number"))
  6.       return errorNum;
  7.     else
  8.       return (x*y);
  9.   }
  10. }

    这个函数既检查了参数的数量,又检查了参数的数据类型,避免了我们调用时传递了错误的参数数量或数据类型。

    以上简要讨论了在使用函数时的应注意的问题,应该说编写一个好的函数以及一个好的脚本程序不容易的,需要读者朋友在以后的编程实践中去摸索总结,以便养成良好的编程习惯。

——摘于《完全手册 Javascript动态网页开发详解》杨水清 编著

原创粉丝点击