JavaScript初级教程(第四课)第2/2页

 更新时间:2007年04月05日 00:00:00   作者:  

这是我定义的一个数组: 
    var monkeys = new Array("mattmarg","wendy","kristin","tim","aaron", "luke");
    var kittyphile = new Array("wendy","ruby","roscoe","tim");
    var discophile = new Array("mattmarg", "john travolta", "wendy");
    var happy = new Array("tim", "wendy","stimpy", "aaron");
    var cranky = new Array("ren", "mattmarg","luke");
    随着这些数组的定义,arrayIntersect函数给出,我们可轻而易举的发现那些网猴酷爱迪斯科:爱跳舞的网猴
    注意到尽管John Travolta喜爱迪斯科,但他不在monkeys请单中,则他就不是只爱跳舞的网猴为调用该函数值,可这么来: 
    <a href="#" onClick="arrayIntersect('dancing monkeys',monkeys,discophile);">dancing monkeys</a>
    这是个具有3个参数的函数:一个代表交叉的姓名,第一个数组,及第二个数组。这也很容易发现爱猫的网猴名爱猫的网猴。
    看一下源码:
    <a href="#" onClick="arrayIntersect('monkeys who love cats',monkeys,kittyphile);">cat-loving monkeys</a>
    让我们看看arrayIntersect函数本身: 
    function arrayIntersect(intersect_name, array_1, array_2)
    {
        var the_list = "";
        for (loop_1=0; loop_1<array_1.length; loop_1++)
        {
            for (loop_2=0; loop_2<array_2.length; loop_2++)
            {
                if (array_1[loop_1] == array_2[loop_2])
                {
                    the_list = the_list + array_1[loop_1] + " ";
                }
            }
        }
        alert("the " + intersect_name + " are: "+ the_list);
    }
    看看你是否已经弄懂本例中的循环。关键是函数第一行: 
    function arrayIntersect(intersect_name, array_1, array_2)
    这里定义了一个叫arrayIntersect的函数,它有3个参数。就象上例,每个参数就象一个变量,当函数调用时赋值。因此,当函数被调用时: 
    arrayIntersect('dancing monkeys',monkeys,discophile);
    下列分配: 
    intersect_name = 'dancing monkeys'
    array_1 = monkeys
    array_2 = discophile
    唯一需注意的是,你必须以正确的参数数目来调用函数。如果你一旦象这样调用arrayIntersect: 
    arrayIntersect(monkeys,discophile);
    将会出错。试一下看会发生什么错误。
    在任一标准的Javascript程序中,函数都是基本的部件。因此理解其工作原理极其重要。第四课就到此结束了。
对于JavaScript来说有两个主要部分:该语言本身及其对象。在第2课介绍的语法中,我们已经研究了变量,语句和if
语句,这些是所有程序设计语言的组成部分。现在来学习Java script语法的其余部分。
    对于JavaScript语法来说,我们仅剩下三个问题需要学习:循环、数组和函数。
    让我们从循环开始。
    有时你想反复做同一件事。你想向某些人询问一个口令,你不断地问,直到得到正确的口令。如果你只想给他们两次尝
试的机会,你可以这么做: 
    var the_password = "pass the wrench";
    var answer = prompt("What's the woyd?","");
    if (answer != the_password) {
        answer = prompt("What's the woyd?","");
        if (password != the_password) {
            document.write("You lose!<p>");
        } else {
            document.write("That's right!<p>");
        }
    } else {
        document.write("That's right!<p>");
    }
    不幸的是如果你想不住地问直到得到正确答案,上述做法是不起作用的。假使你是想询问四次而不是两次,那这已经是
很讨厌的事了。你将使用四个层次的if语句,这决不是件好事。
    反复做相似的事情的最好方法是使用一个循环(loop)。在这种情况下,你可以用一个循环来不断的要求口令直到这个人
说出为止。这里有一个while循环工作的例子,口令是:pass the wrench。
    var password="pass the wrench";
    var answer;
    while (answer != password) 
    {
        answer = prompt("What's the woyd?","");
    }
    在这个典型的Javascript中,我们从双变量声明开始:
    var password="pass the wrench";
    var answer;
    这里我们定义该密码作为一个字符串,我们声明一个称为answer的变量。你将理解为什么我们不得不立即声明一个answer。下面几行是非常重要的:
    while (answer != password) 
    {
        answer = prompt("What's the woyd?","");
    }
    这是一个while循环。while 循环的一般格式为:
    while (some test is true)
    {
        do the stuff inside the curly braces
    }
    上述几行表明:“当answer不等于Password时,执行提示命令。”这一循环将持续地执行大括号内的语句直至条件不成立。在使用者输入的单词与密码一致(即Pass the wrench)的情况下,条件不成立。
    由于在对一个未声明的变量执行一个如(answer!=password)的测试时,在某些浏览器上会产生错误,所以我们必须声明answer。由于在while循环中将通过提示方案对answer赋值,在我们第一次进行循环中,answer将没有数值。提前定义它并设定其处始值为“”。
    由于不定义循环经常地使用,循环经常用来执行一组语句某一特定的次数。在接下来的教程中用另一个循环来演示如何作这项工作。
我们已见到了很多所请求的X`S(X`S是什么?说不清,原文如此--jsfan注),现在复习一下:
    第一步:请求X`S的数目
    var width = prompt("How many x's would you like? (1-10 is good)","5");
    下一步,声明一些变量: 
    var a_line="";
    var loop = 0;
    现在,关键之处: 
    while (loop < width)
    {
        a_line = a_line + "x";
        loop=loop+1;
    }
    即说:“当变量循环小于所请求的X`S行宽时,在该行加入另一X然后在循环值上加1。”该循环将继续加一X到该行并在循环值
上加1直到循环不在小于请求的行宽。请看下列源码分析: 
    第一次 
    a_line = "" (因为初始值为"") 
    loop=0 (因为初始值为0) 
    width=2 (用户赋的值) 
    0 比2小,所以
    a_line = a_line + "x", 所以 a_line = "x" 
    loop=loop+1, 所以 loop = 1 
    返回循环:
    第二次 
    loop=1 
    width=2 
    a_line = "x" 
    1比2小,所以 
    a_line = a_line + "x", so now a_line = "xx" 
    loop=loop+1, so now loop = 2 
    返回循环:
    第三次 
    loop=2 
    width=2 
    a_line = "xx" 
    2不小于2,所以退出循环,继续向下执行:
    随后是:
    alert(a_line);
    启动一个警告对话框。
    这种循环运用的如此普遍以至于程序员们开发了一些简便方式,条件循环可写成这样:
    while (loop < width)
    {
        a_line += "x";  //相当于 a_line = a_line + "x";
        loop++;         //相当于 loop=loop+1;
    }
   首行,“x”,表示“本身加x”。若已有a_number=5,那么可写成,a_number+=3,即是说:a_number=a_number+3。程序员就是这么偷懒的。
    下行,loop++,意味着“自身加1”。于是loop++即为:loop=loop=1。它也可写成loop+=1。这样偷懒行为非常有效。
    就象不止一种方式在一个数上加1一样,也有不止一种方法来写一个循环。While循环不是唯一的循环模式,另一流行的循环是for循环。
    上例中while循环可以写成如下形式: 
    var a_line="";
    var loop = 0;
    while (loop < width)
    {
        a_line += "x";
        loop++;
    }
    也可用For循环写成: 
    var a_line="";
    for (loop=0; loop < width; loop++)
    {
        a_line += "x";
    }
    for循环的格式为:
    for (initial value; test; increment) 
    {
        do this stuff;
    }
    这样,上述for loop设置loop=0并持续加1直到loop<width,这和上例中while loop相同,仅是少了数行而已。都表示“在a_line上加width次x”。
    在我们使用循环之前应明白一件事:循环可以嵌套。这里有一个关于嵌套循环的例子。
    这是程序:
    var height = prompt("How high do you want the grid? (1-10 is good)","10");
    var width= prompt("How wide do you want the grid? (1-10 is good)","10");
    var a_line;
    var new_window = window.open("/webmonkey/98/04/files1a/grid.html","looper","width=400,height=400");
    new_window.document.writeln("<h1>A Grid</h1>");
    for (height_loop=0; height_loop< height; height_loop++) 
    {
        a_line = "";
        for(height_loop=0; height_loop<height; height_loop++) 
        {
            a_line+="x";
        }
        new_window.document.writeln(a_line + "<br>");
    }
在请求高及宽后,打开一新窗口,并为它写一个头,进入for循环。第一个for循环设a_line=“”。试一下不用该行做一下本例,看看会发生什么。在初始化a_line后,程序进入下一个for循环,当宽达到所需值后,建立X`S行并将它显现在新窗口中。这些将发生height次。

相关文章

最新评论