Functions (Română)

Functions (Română)

toate fac aproximativ același lucru, cu câteva diferențe subtile:

există o distincție între numele funcției și variabila funcția este atribuită. Numele funcției nu poate fi schimbat, în timp ce variabila funcția este atribuită poate fi realocată. Numele funcției poate fi utilizat numai în corpul funcției. Încearcă să-l folosească în afara funcției de organism duce la o eroare (sau undefined dacă funcția nume a fost anterior declarată printr-un var declarație)., De exemplu:

var y = function x() {};alert(x); // throws an error

numele funcției apare și atunci când funcția este serializată prin metoda toString a Function.pe de altă parte, variabila căreia i se atribuie funcția este limitată doar de domeniul său de aplicare, care este garantat să includă domeniul în care este declarată funcția.

după cum arată al 4-lea exemplu, numele funcției poate fi diferit de variabila căreia i se atribuie funcția. Ei nu au nici o legătură între ele. O declarație funcție creează, de asemenea, o variabilă cu același nume ca și numele funcției., Astfel, spre deosebire de cele definite prin expresii de funcții, funcții definite de funcția de declarații pot fi accesate prin numele lor în aplicare au fost ele definite în:

O funcție definită de ‘new Function' nu au un nume de funcție. Cu toate acestea, în motorul JavaScript Spidermonkey, forma serializată a funcției arată ca și cum ar avea numele „anonim”. De exemplu, alert(new Function()) rezultate:

function anonymous() {}

Din funcția de fapt nu are un nume, anonymous nu este o variabilă care pot fi accesate în funcție., De exemplu, următoarele ar rezulta într-o eroare:

var foo = new Function("alert(anonymous);");foo();

spre Deosebire de funcțiile definite prin expresii de funcții sau de Function constructor, o funcție definită printr-o funcție de declarație poate fi folosit înainte de declarația funcției în sine. De exemplu:

foo(); // alerts FOO!function foo() { alert('FOO!');}

o funcție definită de o expresie a funcției sau de o declarație de funcție moștenește domeniul de aplicare curent. Adică funcția formează o închidere., Pe de altă parte, o funcție definită de un constructor Function nu moștenește niciun alt domeniu decât domeniul global (pe care toate funcțiile îl moștenesc).funcțiile definite de expresiile funcțiilor și declarațiile funcțiilor sunt analizate o singură dată, în timp ce cele definite de constructorul Function nu sunt. Adică, șirul corpului funcției a trecut la Function constructorul trebuie analizat de fiecare dată când constructorul este apelat., Deși o expresie a funcției creează o închidere de fiecare dată, corpul funcției nu este reparat, deci expresiile funcției sunt încă mai rapide decât „new Function(...)„. Prin urmare, constructorul Function ar trebui, în general, evitat ori de câte ori este posibil.

trebuie remarcat, totuși, că expresiile funcțiilor și declarațiile funcțiilor imbricate în funcția generată de parsarea unui șir Function constructor nu sunt analizate în mod repetat. De exemplu:

o declarație de funcții este foarte ușor (și adesea neintenționat) transformată într-o expresie de funcție., O declarație de funcții încetează să mai fie una atunci când:

  • devine parte a unei expresii
  • nu mai este un „element sursă” al unei funcții sau al scriptului în sine. Un „element sursă” este o declarație nestemată în script sau într-un corp de funcții:

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *