Curs Javascript


Apelare functie cu numar diferit de argumente

Cand se creaza o functie ii putem defini si un numar de parametri (sau 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 parametri ai functiei.
Intr-o astfel de situatie se verifica in corpul functiei daca a fost transmisa valoare pentru parametri definiti, daca nu, acel parametru e undefined (evaluat ca False) si se poate da o valoare implicita (default).


- Exemplu, o functie cu un parametru care returneaza un salut cu numele transmis ca argument. Daca acesta nu e transmis, seteaza o valoare implicita.
<div id='dv1'>Content dv1</div>
<div id='dv2'>Content dv2</div>

<script>
function sayHi(name){
 //daca nu e primita valoare pt. 'name', seteaza un text implicit
 if(!name) var name ='Vizitator';

 return 'Salut '+ name;
}

//adauga in #dv1 rezultatul transmis de apelarea functiei fara argument
document.getElementById('dv1').innerHTML = sayHi();

//a doua apelare, cu argument
document.getElementById('dv2').innerHTML = sayHi('MarPlo');
</script>

Definire parametri cu valoare implicita

La crearea unei functii se pot defini parametri cu o valoare implicita, astfel se evita necesitatea verificarii daca argumentul e transmis la apelare.
Sintaxa:
function numeF(p1=v1, p2=v2){
 //codul care va fi executat
}
- 'p1' si 'p2' sunt parametrii; iar 'v1' si 'v2' reprezinta valorile implicite pentru fiecare.

Cand functia este apelata fara argumentul respectiv, parametru va avea valoarea data la definire, altfel preia valoarea transmisa.
Iata exemplu prezentat anterior, dar aici cu valoare implicita definita la parametru.
<div id='dv1'>Div dv1</div>
<div id='dv2'>Div dv2</div>

<script>
//creaza functia cu o valoare default pt. parametru
function sayHi(name='Vizitator'){
 return 'Salut '+ name;
}

//adauga in #dv1 rezultatul transmis de apelarea functiei fara argument
document.getElementById('dv1').innerHTML = sayHi();

//a doua apelare, cu argument
document.getElementById('dv2').innerHTML = sayHi('MarPlo');
</script>

Proprietatea arguments

Proprietatea arguments retine intr-un obiect tip array argumentele (valorile) transmise la apelarea unei functii, in ordinea adaugarii lor (cu primul index 0).
Aceasta proprietate nu poate fi aplicata la 'arrow functions'.
Valoarea ei nu este un array, ci un obiect cu indexi numerici. Dar i-se poate aplcica length pentru aflarea numarului de elemente.

Sintaxa:
function numeF(){
 var args = numeF.arguments;

 //codul care va fi executat
}
- Variabila 'args' contine obiectul cu argumentele transmise la apelarea functiei numeF().
- Aici, primul argument poate fi preluat cu: args[0]

Aceasta proprietate este utila cand o functie se apeleaza cu un numar de argumente mai mare decat sunt la definirea ei.
- Exemplu, o functie cu un parametru. Daca e apelata fara argument, seteaza valoarea 0; daca e un singur argument, il dubleaza; daca sunt mai multe le aduna.
<div id='dv1'>Div-ul #dv1</div>
<div id='dv2'>Div-ul #dv2</div>
<div id='dv3'>Div-ul #dv3</div>

<script>
const f1 = function(x){
 //retine obiectul-ul cu argumentele transmise la apelare f1()
 var args = f1.arguments;

 //daca nu e nici un argument, seteaza valoarea 0 pt. 're'
 //daca e un singur argument, il dubleaza
 //daca sunt mai multe, le aduna
 if(args.length ==0) var re =0;
 else if(args.length ==1) var re = args[0]*2;
 else if(args.length >1){
 var re =0;
 for(var i=0; i<args.length; i++) re += args[i];
 }

 return re;
}

//adauga in elemente HTML rezultatul apelarii lui f1() de trei ori, cu nr. diferit de argumente
document.getElementById('dv1').innerHTML ='f1() fara argument returneaza: '+ f1();
document.getElementById('dv2').innerHTML ='f1(3) returneaza: '+ f1(3);
document.getElementById('dv3').innerHTML ='f1(2, 5, 3) returneaza: '+ f1(2, 5, 3);
</script>

Functia callback

Functia callback e o functie transmisa ca argument la alta functie, unde va fi apelata cu numele parametrului la care e asociata, si argumentele necesare.
- Se poate intelege mai bine din urmatorul exemplu:
<div id='dv1'>Callback function.</div>

<script>
//functia callback, adauga 'Salut name' in #dv1
const fcb = (name)=>{
 document.getElementById('dv1').innerHTML ='Salut '+ name;
}

//functia la care va fi transmisa si utilizata functia callback
function f1(id, callback){
 if(id >1) callback('MarPlo.net');
}

//apeleaza f1() cu un Id si functia callback fcb()
f1(8, fcb);
</script>
Adesea se folosesc functiile anonime ca functii callback. Functiile anonime sunt cele care se definesc direct ca argument la apelarea altei functii.
- Iata exemplu anterior, aici cu functie callback anonima.
<div id='dv1'>Anonimous callback function.</div>

<script>
//functia la care va fi transmisa si utilizata functia callback
function f1(id, callback){
 if(id >1) callback('GamV.eu');
}

//apeleaza f1() cu un Id si functie callback anonima
f1(8, (name)=>{
 document.getElementById('dv1').innerHTML ='Salut '+ name;
});
</script>

Functii recursive

O functie JavaScript poate fi recursiva, adica se poate autoapela.
- Exemplu, o functie JavaScript recursiva care afla factorialul unui numar precizat "n".

<div id='dv1'>Exemplu functie recursiva</div>

<script>
//returneaza factorial de n
function factorial(n){
 var re;

 if(n >0) re = n*factorial(n-1); //auto-apelare
 else if(n ==0) re =1;

 return re;
}

//afisaza in #dv1 factorial de 8
document.getElementById('dv1').innerHTML ='Factorial de 8 este: '+ factorial(8);
</script>
Functia factorial() verifica intai daca "n" este mai mare decat 0, apoi in caz afirmativ, "n" se inmulteste cu rezultatul returnat de auto-apelarea ei cu argumentul "n-1". Cand "n" ajunge 0 se incheie repetarea auto-apelarii si returneaza valoare lui 're'.
JavaScript incheie toate auto-apelarile in corpul functiei si retine de la o auto-apelare la urmatoarea ultimul rezultat returnat pana ce ajunge la apelarea initiala a functiei, apoi intoarce rezultatul final.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag defineste zona de click intr-o harta creata dintr-o imagine?
<map> <img> <area>
<img src="image.jpg" usemap="#map1">
<map name="map1">
  <area shape="rect" coords="9, 120, 56, 149" href="#">
  <area shape="rect" coords="100, 200, 156, 249" href="#">
</map>
Ce proprietate CSS indica ce sa se intample cand continutul unui element depaseste dimensiunile lui?
display overflow position
#id {
  overflow: auto;
}
Clic pe evenimentul care este declansat cand mouse-ul e deasupra unui obiect.
onclick onmouseover onmouseout
document.getElementById("id").onmouseover = function(){
  document.write("Sa ai Viata Buna");
}
Indicati variabila PHP ce contine datele adaugate in adresa URL, dupa caracterul "?".
$_SESSION $_GET $_POST
if(isset($_GET["id"])) {
  echo $_GET["id"];
}
Clic pe pronumele reflexiv care e potrivit in propozitia: "Marc is the boy ... won the prize".
who which whoever
Marc is the boy who won the prize.
- Marc e baiatul care a castigat premiul.
Clic pe pronumele reflexiv care e potrivit in propozitia: "Voy a ver al pintor de ... les hablé ayer".
que quien cuyo
Voy a ver al pintor de quien les hablé ayer.
- Ma duc sa vad pictorul despre care ti-am vorbit ieri.
Utilizare Functii si Parametri lor

Last accessed pages

  1. Pronumele in limba engleza - Pronouns (52076)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (259731)
  3. Comparative si superlative (3330)
  4. Teste spaniola - Tests y ejercicios de Español - Gramática (25243)
  5. Conditional IF in Limba Engleza - Fraze Conditionale (119800)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (621)
  2. Conditional IF in Limba Engleza - Fraze Conditionale (538)
  3. Gramatica limbii engleze - Prezentare Generala (439)
  4. Exercitii engleza - English Tests and exercises - Grammar (379)
  5. Coduri pt culori (362)