In aceasta lectie vor fi prezentate trei exemple de scripturi care folosesc functii mai complexe decat cele prezentate in lectia anterioara.

1. Modificarea numarului argumentelor

Cand creem o functie ii definim si numarul de argumente pe care le accepta, lucru de care se tine cont in momentul apelarii ei.
Sunt situatii in care dorim sa transmitem functiei un numar diferit de argumente, care poate fi mai mic sau mai mare decat numarul de argumente pe care le are functia la construirea ei.
Intr-o astfel de situatie putem folosi o valoare prestabilita in interiorul functiei, pentru cazul in care nu sunt transferate argumente.
In continuare va fi prezentat un script care afiseaza un mesaj de salut atunci cand utilizatorul ajunge la o pagina web. Programul afiseaza un anumit mesaj daca recunoaste sau nu numele vizitatorului. Daca "utilizator" nu este "null" variabila a fost definita. Acest lucru este posibil doar daca o valoare, ca " Media", este transferata functiei. Daca variabila "utilizator" este egal cu "null" atunci scriptul evita folosirea variabilei in mesajul de salut.

<html>
<head>
    <script type="text/javascript">
    <!--
        function mesaj(utilizator) {
            if (utilizator!=null) {
                document.writeln("Salut "+utilizator);
            }
            else {
                document.writeln("Bine ati venit pe site!");
            }
        }
    //-->
    </script>
</head>
<body>

<script type="text/javascript">
<!--
    document.writeln("Prima apelare a functiei mesaj() <br />");
    mesaj("Media");
    document.writeln("<br />A doua apelare a functiei mesaj() <br />");
    mesaj();
//-->
</script>

</body>
</html>
Acest script va afisa in pagina urmatorul rezultat:
Prima apelare a functiei mesaj()
Salut Media
A doua apelare a functiei mesaj()
Bine ati venit pe site!
- Studiati codul functiei si observati diferenta mesajelor din cele ddoua apelari.

In unele situatii unei functii ii sunt transferate mai multe argumente decat au fost specificate la crearea ei. Valorile argumentelor suplimentare nu sunt pierdute, acestea se stocheaza intr-un tablou (sau "matrice") numit "arguments" , care exista implicit pentru orice functie.
Toate argumentele sunt pastrate in acest tablou si pot fi extrase in interiorul corpului functiei.
Argumentele functiei "mesaj" sunt stocate in tabloul "mesaj.arguments". Stocarea se face intr-o ordine asigurata de o "cheie" a carei prima valoare este 0.
Pentru a extrage primul element din tabloul "arguments" al functiei "mesaj" folosim sintaxa "arg1 = mesaj.arguments[0]", pentru al doilea "arg2 = mesaj.arguments[1]".
Toate tablourile JavaScript sunt indexate pornind de la 0. Pentru a gasi numarul total de argumente din tablou putem folosi o instructiune speciala "length" care returneaza lungimea (nr. de elemente) unui tablou (numit si "matrice").
Urmatorul exemplu atribue variabilei "nrArg" o valoare care reprezinta numarul de argumente (elemente) din tabloul "mesaj.arguments": Folosind instructiunile prezentate mai sus (legate de tabloul "arguments"), putem crea o noua versiune a scriptului din primul exemplu. Aceasta versiune raspunde mai corect in functie de cunoasterea sau nu a numelui utilizatorilor.
<html>
<head>
<script type="text/javascript">
<!--
function mesaj(utilizator) {
    if (utilizator!=null) {
        document.writeln("Salut "+utilizator);
    }
    else {
        document.writeln("Bine ati venit pe site");
    }
    numarArgumente=mesaj.arguments.length;

    if(numarArgumente>1) {
        for (var i=1; i<numarArgumente; i++) {
            document.writeln(mesaj.arguments[i]);
        }
    }
}
//-->
</script>
</head>
<body>

<script type="text/javascript">
<!--
var utilizator="Marius", extraMesaj="Bine ai revenit";
var utilizator2=null;
var extraMesaj1="Vrei sa devii membru ?";var extraMesaj2="Te poti inscrie online";
mesaj(utilizator,extraMesaj);
document.writeln("<hr>");
mesaj(utilizator2,extraMesaj1,extraMesaj2);
//-->
</script>

</body>
</html>
Acest exemplu va afisa in pagina web urmatorul rezultat:
Salut Marius Bine ai revenit
Bine ati venit pe site Vrei sa devii membru ? Te poti inscrie online

2. Functii recursive

O functie JavaScript poate fi recursiva, adica se poate autoapela.
O metoda buna de a demonstra capacitatea recursiva a functiilor este rezolvarea unei ecuatii factoriale.
In exemplul urmator avem o functie JavaScript recursiva care afla factorialul unui numar precizat "n" (aici 7):

<html>
<head>
<script type="text/javascript">
<!--
document.writeln("Calculeaza factorialul de 7 prin functie recursiva")
function factorial(n) {
var rezultat;
if (n>0) {
rezultat = n*factorial(n-1);
}
else if (n==0) {
rezultat = 1;
}
else {
rezultat = null;
}
return(rezultat)
}
//-->
</script>
</head>
<body>
<form>
<input type = "button" value = "Factorial 7" onclick="alert(factorial(7))" >
</form>
</body>
</html>
In fereastra browser-ului va apare urmatorul rezultat:
- Functia verifica intai daca "n" este mai mare decat 0, apoi in caz afirmativ, "n" se inmulteste cu rezultatul returnat de auto-apelarea functiei cu argumentul "n-1". Cand "n" ajunge 0, aparitia cea mai imbricata a functiei se incheie si returneaza prima valoare. JavaScript incheie fiecare functie imbricata pana ce ajunge la apelarea initiala a functiei "factorial", apoi intoarce rezultatul final.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tag HTML5 este indicat sa contina meniul cu link-uri de navigare in site?
<section> <nav> <article>
<nav><ul>
 <li><a href="http://coursesweb.net/css/" title="CSS Course">CSS Course</a></li>
 <li><a href="http://www.marplo.net/jocuri/" title="Flash Games">Flash Games</a></li>
</ul></nav>
Ce proprietate CSS muta elementrul in dreapta sau stanga de la locul unde e?
text-align clear float
.some_class {
  width: 30%;
  float: left;
}
Clic pe metoda obiectului Math care rotunjeste numarul x descrescator la cel mai apropiat intreg.
Math.ceil(x) Math.abs(x) Math.floor(x)
var num = 12.34567;
num = Math.floor(num);
alert(num);       // 12
Indicati functia PHP care returneaza numarul de caractere dintr-un sir.
mb_strlen() count() stristr()
$str = "sir cu caractere utf-8 åèö";
$nrchr = mb_strlen($str);
echo $nrchr;        // 29
Clic pe raspunsul potrivit la intrebarea: "When it happened?".
On the 7th of July 1996 It is a quarter to 5. Nice weather.
When it happened? On the 8th of August 2001.
- Cand s-a intamplat? Pe 8 August 2001.
Indicati raspunsul potrivit la intrebarea: "¿Cuando sucedió?".
Hace buen tiempo. En el 8 de Agosto de 2001 Son las tres menos cuarto.
¿Cuando sucedió? En el 8 de Agosto de 2001.
- Cand s-a intamplat? Pe 8 August 2001.
Functii JavaScript 2

Last accessed pages

  1. Coduri pt culori (1681)
  2. Zoo Amigos (943)
  3. Butterfly Kyodai (5680)
  4. Bubbles3 (8791)
  5. The Rise Of Atlantis (1521)

Popular pages this month

  1. Bubbles3 (3366)
  2. Gramatica limbii engleze - Prezentare Generala (3170)
  3. Prezentul simplu si continuu - Present Tense Simple and Continuous (2266)
  4. Butterfly Kyodai (2168)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (1918)