Să presupunem că aveți un fișier de 82 de linii și conține doar o serie de instrucțiuni. (Sper că acest lucru nu este adevărat, dar orice este posibil.) Cum ați înțelege ce face programul? Cum l-ai modifica sau ai folosit? Ar fi cam greu să faci ceva cu acest cod pentru că nu există structură pentru el.
Pentru a rezolva această problemă, puteți utiliza funcții. O funcție este un grup de declarații care efectuează o anumită sarcină. Funcțiile ne permit să desființăm un program în programe mai mici, făcând codul nostru mai ușor de citit, reutilizabil și testabil.
Acest tip de funcție listează pașii pentru ca programul să funcționeze. Considerăm că scriem un program pentru conectarea unui utilizator la un site web. Programul poate consta în următoarele sarcini:
Fiecare dintre acești pași poate fi conținut în interiorul unei funcții de autentificare. Aceasta este o funcție de exemplu:
funcția greet () console.log ("Hello, World");
Aceasta este forma generală a unei funcții:
funcția functionName () declarație; afirmație; etc
Pentru a executa funcția (cunoscută și ca apelarea funcției sau invocarea funcției), scrieți o instrucțiune care o numește.
salut ();
()
este locul în care trecem intrarea în funcție. Când definim funcția, intrarea se numește parametru. Când apelăm funcția, intrarea va fi valoarea reală și se numește argument. Exemplu:
funcția salut (nume) console.log ("Hello," + nume); salut ("Alberta"); // Hello Alberta
Cu JavaScript ES6, puteți defini funcții utilizând sintaxa săgeată. Aici este definită funcția noastră de salut folosind sintaxa săgeată:
să salut = () => console.log ("Hello, World");
O funcție cu un parametru:
să salut greet = name => console.log ("Hello", + nume);
O funcție cu mai mult de un parametru:
să salut = (fname, lname) => console.log ("Bună ziua", + fname + "" + nume);
O funcție cu declarații multiple:
să admitem greet = (fname, lname) => let name = fname + "" + nume; console.log ("Bună ziua", "+ nume");
Deoarece o funcție de săgeată este o funcție anonimă, dăm funcției noastre un nume atribuindu-i unei variabile. Funcțiile cu săgeți pot fi utile atunci când corpul funcției are o singură declarație.
Acest tip de funcție returnează o valoare. Funcția trebuie să se încheie cu o declarație de returnare. Acest exemplu returnează suma a două numere.
funcția add (x, y) return x + y;
Aceasta este forma generală care definește o funcție de returnare a valorii:
funcția functionName () declarație; afirmație; etc expresie retur;
Valoarea a expresie este ceea ce se obține prin funcția. Acest tip de funcție este util atunci când este stocată într-o variabilă.
permite variabilaName = functionName ();
Valoarea unei variabile este acea parte a programului în care se poate accesa o variabilă. O variabilă poate fi locală sau globală. Domeniul de aplicare a unei variabile locale este în interiorul funcției în care a fost creată. Nici un cod în afara funcției nu poate accesa variabilele sale locale.
De asemenea, atunci când utilizați lăsa
sau const
pentru a declara o variabilă, au domeniul de blocare. Un bloc este un set de afirmații care apar împreună ca grup. Un bloc ar putea fi la fel de simplu ca și împachetarea codului nostru în bretele curbate:
lăsați a = 2;
Variabila A
este local la blocul în care se află. Un bloc poate fi, de asemenea, o buclă sau o declarație if. Exemplu:
lăsați a = 1; dacă (5> 4) let a = 2; console.log (a); // 1
Deoarece instrucțiunea consolei este în același domeniu ca și prima noastră variabilă A
, afișează acea valoare, care este 1. Nu are acces la variabilele din interiorul blocului if. Acum, ia în considerare acest exemplu:
lăsați a = 1; dacă (5> 4) let a = 2; console.log (a); // 2
Acum, 2 vor fi afișate deoarece domeniul de variabile pe care declarația consolei noastre are acces la este în blocul if. Parametrii unei funcții sunt, de asemenea, variabile locale și pot fi accesate numai prin codul din interiorul funcției. Variabilele globale, pe de altă parte, pot fi accesate prin toate declarațiile din fișierul unui program. Exemplu:
lăsați a = 1; funcția foo () a = 2; console.log (a); // 1 foo (); console.log (a); // 2
În acest exemplu, A
este o variabilă globală și avem acces la ea în interiorul funcției foo. Prima declarație a consolei va fi afișată 1. După apelare foo
, valoarea a A
este setat la 2, ceea ce înseamnă afișarea celei de-a doua instrucțiuni a consolei 2.
Variabilele globale ar trebui utilizate foarte puțin, în mod ideal deloc. Deoarece variabilele globale pot fi accesate prin orice parte a unui program, ele riscă să fie schimbate în moduri imprevizibile. Într-un program mare cu mii de linii de cod, programul devine mai greu de înțeles, deoarece nu puteți vedea cu ușurință modul în care variabila este utilizată. Este mai bine să creați și să utilizați variabile locale.
Cu toate acestea, dacă aveți nevoie să utilizați o variabilă în mai multe locuri în program, este bine să utilizați o constantă globală. Declararea unei variabile cu const
cuvântul cheie îl împiedică să fie modificat, ceea ce îl face mai sigur de utilizat. Trebuie doar să vă faceți griji cu privire la actualizarea valorii constantei în locul în care a fost declarată.
Amintiți-vă că un parametru este o variabilă pe care o funcție o utilizează pentru a accepta date. Parametrul este atribuit valorii argumentelor unei funcții atunci când este apelată funcția. Începând cu ES6, parametrilor li se pot da și valori implicite cu formatul parameterName = valoarea
. În acest caz, puteți apela o funcție fără argumente și va utiliza valorile implicite. Exemplu:
funcția salut (nume = "lume") console.log ("Hello," + nume); greet (); //Salut Lume
Operatorul de repartiție / repaus este nou pentru ES6 și poate fi folosit fie pentru a extinde o matrice sau un obiect în valori individuale, fie pentru a aduna parametrii unei funcții într-o matrice. Acesta este un exemplu de utilizare a unui parametru de repaus:
funcția foo (... args) console.log (args); foo (1, 2, 3, 4, 5); // [1, 2, 3, 4, 5]
Să presupunem că acum aveți un fișier care are 1.082 de linii. (Am văzut acest lucru și ar trebui să fugiți dacă întâlniți un astfel de lucru.) Fișierul este organizat în funcții, dar este dificil să vedem cum se leagă unul de celălalt.
Pentru a grupa un comportament înrudit, ar trebui să punem codul nostru în module. Un modul din ES6 este un fișier care conține funcții și variabile asociate. Modulele permiteți ascunderea proprietăților private și expunerea proprietăților publice pe care vrem să le folosim în alte fișiere. Numele fișierului ar fi numele modulului. Modulele au, de asemenea, domeniul lor de aplicare. Pentru a utiliza variabile în afara scopului modulului, acestea trebuie exportate. Variabilele care nu sunt exportate vor fi private și pot fi accesate numai în cadrul modulului.
Proprietățile individuale pot fi exportate astfel:
funcția de export foo () console.log ("Hello World"); export lăsați bar = 82; exportul permite baz = [1,2,3];
Alternativ, toate proprietățile pot fi exportate cu o singură declarație de export:
funcția foo () console.log ("Hello World"); lăsați bar = 82; baz = [1,2,3]; export foo, bar, baz;
Pentru a utiliza variabilele unui modul, îl importați în fișier. Puteți specifica ce doriți să importați din modul astfel:
import foo, bar, baz de la "foo";
De asemenea, puteți redenumi importul:
import foo ca Foo de la "foo"; Foo ();
Sau puteți importa toate proprietățile modulului:
import * ca myModule de la "foo"; myModule.foo ();
Funcțiile ne permit să ne împărțim programele în programe mai mici pe care le putem gestiona cu ușurință. Această practică este cunoscută sub numele de modulare. Există două tipuri de funcții: funcții void și funcții de returnare a valorii. O funcție voidă execută instrucțiunile din interiorul acesteia. O funcție de returnare a valorii ne oferă o valoare înapoi.
Domeniul de aplicare este acea parte a programului în care poate fi accesată o variabilă. Variabilele declarate în interiorul unei funcții, inclusiv parametrii funcției, sunt locale. Blocurile au, de asemenea, sferă de aplicare, iar variabilele locale pot fi create în interiorul lor.
Variabilele care nu sunt închise într-un bloc sau modul vor fi globale. Dacă aveți nevoie de o variabilă globală, este acceptabil să aveți o constantă globală. În caz contrar, încercați să introduceți codul în module deoarece modulele au propriul scop. Dar chiar mai bine, modulele dau structura și organizarea codului.