Variabile. Domeniul de variabilitate a funcțiilor în JavaScript - variabile globale și locale Cum se face o variabilă locală JavaScript global

Variabile

Declarația

Înainte de a utiliza variabila în JavaScript, trebuie anunțat. Variabilele sunt anunțate utilizând un cuvânt cheie var. În felul următor:

Var i; Suma variala;

O dată folosind cuvânt cheie. var, puteți declara mai multe variabile:

Declarația de variabile poate fi combinată cu inițializarea acestora:

Var message \u003d "hi"; var i \u003d 0, j \u003d 0, k \u003d 0;

Dacă valoarea inițială din declarația VaR nu este specificată, variabila este declarată, însă valoarea sa inițială rămâne incertă (nedefinită) până când este modificată de program.

Dacă aveți experiență utilizând limbi de programare cu tipuri de date statice, cum ar fi C # sau Java, puteți observa că în anunțurile variabilelor din limba JavaScript nu există nici un anunț de tip. Variabilele din JavaScript pot stoca valori ale oricăror tipuri. De exemplu, JavaScript este permis să atribuie un număr de variabile și apoi aceeași variabilă pentru atribuirea unui șir:

Var i \u003d 10; I \u003d "salut";

Folosind instrucțiunea VAR, puteți declara aceeași variabilă de mai multe ori. Dacă re-anunțul conține un inițializator, acționează ca instrucțiuni normale misiune.

Dacă încercați să citiți valoarea unei variabile neangajate, JavaScript va genera o eroare. În modul strict, prevăzut de standardul ECMAScript 5, eroarea este, de asemenea, excitată atunci când încercați să atribuiți valoarea unei variabile nerealizate. Cu toate acestea, istoric și atunci când nu se efectuează în mod strict, dacă atribuiți valoarea unei variabile care nu este declarată utilizând instrucțiunea VAR, atunci JavaScript va crea această variabilă ca o proprietate globală a obiectului și va acționa aproape la fel ca și în mod corect Variabilă anunțată. Aceasta înseamnă că variabilele globale nu pot fi anunțate. Cu toate acestea, acest lucru este considerat un obicei prost și poate fi o sursă de erori, așa că încercați întotdeauna să vă declarați variabilele cu var.

Domeniul de aplicare al variabilei

Domeniul de aplicare (domeniul de aplicare) al variabilei reprezintă partea programului pentru care este definită această variabilă. Variabila globală are un domeniu global - este definit pentru întregul program JavaScript. În același timp, variabilele declarate în interiorul funcției sunt definite numai în corpul său. Ele sunt numite locale și au un domeniu de aplicare local. Parametrii funcțiilor sunt, de asemenea, considerați variabile locale definite numai în corpul acestei funcții.

În interiorul corpului funcției, variabila locală are un avantaj față de o variabilă globală cu același nume. Dacă declarați un parametru local variabil sau funcție cu același nume că variabila globală este de fapt variabila globală va fi ascunsă:

Var rezultat \u003d "Global"; Funcția GetRESULT () (Var rezultat \u003d "local"; Rezultatul returnării;); Consola.log (getRESULT ()); // afișați "local"

Variabilele anunțate cu zona de vizibilitate globală, instrucțiunea VAR poate fi omisă, dar când declarați variabile locale, trebuie să utilizați întotdeauna instrucțiunea VAR.

În JavaScript există trei domenii de vizibilitate: domeniul global, vizibilitate și bloc. Domeniul de aplicare al variabilei - Acesta este un complot cod sursa Un program în care variabilele și funcțiile sunt vizibile și pot fi utilizate. Domeniul global este altfel numit codul de nivel superior.

Variabile globale

Variabila declarată în afara funcției sau blocului se numește globală. Variabila globală este disponibilă oriunde în codul sursă:

Var num \u003d 5; Funcție foo () (consolă.log (număr);) foo (); // 5 console.log (NUM); // 5 (consola.log (Num); // 5)

Variabile locale

Variabila declarată în interiorul funcției este numită local. Variabila locală este disponibilă oriunde în interiorul corpului funcției în care a fost declarată. Variabila locală este creată de fiecare dată când apelați o funcție și este distrusă când funcția este închisă de la acesta (când funcția este finalizată):

Funcția Foo () (var 0 5; consolă.log (NUM);) foo (); // 5 console.log (tipul de numere); // nedefinit.

Variabila locală are un avantaj față de o variabilă globală cu același nume, ceea ce înseamnă că variabila locală va fi utilizată în interiorul funcției și nu globală:

Var x \u003d "global"; // Verificarea funcției variabile globale () (var x \u003d "local"; // variabila locală cu același nume ca document global.Write (x); // variabila locală este utilizată și nu globală) de verificare (); // \u003d\u003e "locale" încercați "

Blocați variabilele

Variabila declarată în interiorul blocului utilizând cuvântul cheie Let este numit bloc. Variabila bloc este disponibilă oriunde în interiorul blocului în care a fost anunțat:

Fie Num \u003d 0; (Fie Num \u003d 5; console.log (NUM); // 5 (Fie Num \u003d 10; console.log (Num); // 10) consolă (Num); // 5) consolă.log (NUM) ; // 0.

Anunț repetat

Dacă utilizați cuvântul cheie VAR re-anunțați variabila cu același nume (în aceeași zonă de vizibilitate), atunci nu se întâmplă nimic:

Var a \u003d 10; Var a; Consola.log (a); // 10.

Dacă re-AD-ul este însoțit de inițializare, o astfel de instrucțiune acționează ca o atribuire obișnuită a unei noi valori:

Var a \u003d 10; var a \u003d 5; // același ca A \u003d 5; Consola.log (a); // cinci.

Dacă utilizați cuvântul cheie, re-anunțați variabila cu același nume (în aceeași zonă de vizibilitate), va fi cauzată de o eroare:

Var a \u003d 10; Lasati a; // eroare.

Lanțul regiunilor de vizibilitate

Luați în considerare următorul exemplu:

Var num \u003d 5; Funcția Foo () (var Num2 \u003d 10; bara de funcționare () (var Num3 \u003d 15;))

În acest cod, trei domenii de domeniu: Global, Domeniu Foo () Funcția și scopul barei (). În scopul global al vizibilității, funcția num variabilă și foo () sunt definite. În cadrul funcției Foo (), funcția Num2 variabilă și bara () este definită, este disponibilă și variabila numărătoare din zona de vizibilitate globală. Domeniul de aplicare al funcției Bar () conține o variabilă num3, care este disponibilă numai în interiorul barei (). În scopul funcției Bar (), variabilele din alte două domenii sunt, de asemenea, disponibile, deoarece sunt părinți cu privire la aceasta. Lanțul de aplicabilitate pentru acest exemplu este prezentat în figura de mai jos:

În figură, diferitele domenii de vizibilitate este prezentat de dreptunghiuri de diferite culori. Domeniul intern de vizibilitate în lanțul regiunilor de vizibilitate este disponibil în toate zonele externe, dar nimic nu este disponibil pentru nimic din zonele interne de vizibilitate.

Lanțul regiunilor de vizibilitate este comandat. Interpretul caută identificatori în lanțul zonelor de vizibilitate spre exterior, dar nu în interior. Aceasta înseamnă că căutarea numelui începe cu zona de vizibilitate în care a fost efectuată recursul la identificator. Dacă numele identificatorului este detectat, căutarea se oprește. Dacă numele nu a reușit în scopul actual pentru a găsi un nume, se efectuează o căutare în scopul (în exterior), etc. Astfel, un identificator din zona de vizibilitate în care a fost găsit. Dacă identificatorul nu se găsește în niciuna dintre aplicațiile JavaScript va genera o eroare:

Var \u003d "global"; var num \u003d 5; FUNCTION FOO () (VAR STR \u003d "Local"; // Variabila locală locală STR \u003d 10; // Variable variabilă numără (x); // eroare. Variabila x nu se află în nici o zonă de vizibilitate) foo (); Alertă (str.); // alertă "globală" (număr); // 10.

Dacă în corpul funcției variabile advenbile pentru a atribui valorii, atunci la momentul apelului funcției, dacă nu există o variabilă în zona de vizibilitate globală cu același nume, va fi creată o nouă variabilă globală:

Funcția Foo () (Num \u003d 2;) foo (); // a fost creată o nouă variabilă variabilă numără (NUM). // 2.

Îndepărtați anunțurile

În JavaScript, variabilele anunțate sunt disponibile oriunde în domeniul lor de aplicare, aceasta înseamnă că variabilele sunt vizibile chiar înainte de a fi declarate în cod. Acest funcția JavaScript Este numită neoficial: Codul programului se comportă ca și cum declarațiile de variabile au crescut implicit (fără inițializare) la vârf în raport cu domeniul lor de aplicare.

Luați în considerare următorul fragment de cod:

Var \u003d "global"; Funcția Foo () (Alert (STR); // nedefinit Var Str \u003d "local"; Alertă (str); // "local") foo ();

Privind codul, ar fi posibil să credem că prima alertă ar trebui să emită șirul "global", deoarece anunțul STR variabile locale nu a fost încă finalizat. Cu toate acestea, valoarea nedefinită este afișată. Datorită ridicării admiterii, funcția este mai mare decât punerea în aplicare a implementării de mai jos, în care declarația variabilei este ridicată la începutul funcției:

Funcție Foo () (Str. VAR; // Anunțul variabilei locale la începutul funcției de alertă (STR); // Aici este disponibil, dar nu inițializat de STR \u003d "local"; / / Aici este o alertă inițializată (Str); // aici are o valoare așteptată - "local")

Același lucru este valabil și pentru zona de vizibilitate globală, variabila declarată din partea de jos este disponibilă în partea de sus:

Alertă (număr); // nedefined var num \u003d 10; Alertă (număr); // 10.

Ultima actualizare: 04/05/2018

Toate variabilele din JavaScript au un domeniu specific, în cadrul căruia pot acționa.

Variabile globale

Toate variabilele care sunt anunțate în afara funcțiilor sunt globale:

Aici, variabilele X și D sunt globale. Acestea sunt disponibile din orice loc al programului.

Dar variabila Z nu este globală, deoarece este definită în interiorul funcției.

Variabile locale

Variabila definită în interiorul funcției este locală:

Funcția de afișaj () (var z \u003d 10; consolă.log (z); lasa b \u003d 8; console.log (b);)

Variabilele Z și B sunt locale, ele există numai în cadrul funcției. În afara funcțiilor nu pot fi utilizate:

Funcția edificată () (var z \u003d 10; consolă.log (z);) consolă.log (z); // eroare, deoarece Z nu este definit

Când funcția își termină munca, atunci toate variabilele definite în funcții sunt distruse.

Ascunderea variabilelor

Ce se întâmplă dacă avem două variabile - una globală și cealaltă locală, care au același nume:

Var z \u003d 89; Funcția de afișare () (var z \u003d 10; console.log (z); // 10) Edijare (); // 10.

În acest caz, funcția va fi utilizată în funcție, care este definită direct în funcție. Adică, variabila locală va ascunde Global.

var sau lasa.

Când utilizați operatorul de let, fiecare bloc de cod definește un nou domeniu în care există o variabilă. De exemplu, putem determina simultan variabila la nivelul blocului și la nivelul funcției:

Fie Z \u003d 10; DISPLAYZ FUNCTION () (Fie Z \u003d 20; (Fie Z \u003d 30; console.log ("bloc:", z);) console.log ("funcția:", z);) DISPLAYZ (); Consola.log ("Global:", Z);

Aici, în interiorul funcției de afișare, este definit un bloc de cod în care este definită variabila Z. Acesta ascunde variabila globală și variabila Z, definită la nivelul funcției. ÎN program real Blocul ar putea fi predominia funcției imbricate, blocul de ciclu sau dacă designul. Dar, în orice caz, un astfel de bloc definește un nou domeniu, dincolo de care nu există variabila.

Și în acest caz, vom obține următoarea concluzie a consolei:

Block: 30 Funcție: 20 Global: 10

Folosind operatorul VAR, nu putem determina simultan cu variabila cu același nume și funcție și în blocul de cod din această caracteristică:

Funcția de afișare () (var z \u003d 20; (var z \u003d 30; // eroare! Variabila Z este deja definită de consola.log ("bloc:", z);) console );););

Adică, cu var, putem defini o variabilă cu un nume sau la nivelul funcției sau la nivelul blocului de cod.

Constantele

Totul aparține operatorului de lege aparține operatorului Const care vă permite să definiți constantele. Blocurile de cod se stabilesc sfera vizibilității constantelor, iar constantele definite pe blocurile imbricate ale codului ascunde constantele externe cu același nume:

Const z \u003d 10; Funcția de afișare () (const z \u003d 20; ("bloc:", z); // 30) console.log ("funcția:", z); / / 20) afișare ( ); Consola.log ("Global:", Z); // 10.

Variabilele inutile

Dacă nu folosim acest cuvânt cheie atunci când determinăm variabila în funcție, atunci o astfel de variabilă va fi globală. De exemplu:

Bara de funcții () (foo \u003d "25"; bară (); Consola.log (foo); // 25.

În ciuda faptului că în afara funcției de bare, variabila Foo nu este definită de oriunde, totuși este disponibilă în afara funcției în contextul extern.

În caz contrar, dacă nu numai că am primit valoarea variabilei, dar l-am fi definit:

Bara de funcții () (VAR FOO \u003d "25";) Bar (); Consola.log (foo); // eroare.

mod strict.

Definiția variabilelor globale în caracteristici poate duce la erori potențiale. Pentru a le evita utilizarea modului strict sau a modului strict:

"Utilizați stricte"; Bara de funcții () (foo \u003d "25"; bară (); Consola.log (foo);

În acest caz, vom obține o eroare de sintaxă: identificator neașteptat, ceea ce indică faptul că variabila foo nu este definită.

Setați modul de mod strict în două moduri:

    adăugați expresia "Utilizați strictă" la începutul codului JavaScript, apoi modul strict va fi aplicat întregului cod.

    adăugați expresia "Utilizați strictă" la începutul funcției corpului, apoi modul strict va fi aplicat numai pentru această caracteristică.

ÎN JavaScript., Există două domenii de vizibilitate: locale și globale. Depinde de locul în care variabila este declarată, în interiorul funcției sau în afara funcției.

Dacă variabila este declarată în interiorul funcției, se numește locală dacă variabila este declarată în afara funcției, atunci se numește globală.

Conceptul de programare modern, recomandă ca toate variabilele din scripturi (programe) să fie locale, iar programul însuși a constat numai din funcții în care fiecare funcție ar efectua doar o singură sarcină. De exemplu, într-un alt limbaj de programare web PHP, în general au refuzat să utilizeze variabilele globale.

Variabile globale în JavaScript

Variabilele globale sunt declarate în afara funcțiilor și le puteți contacta (accesul) de la orice funcție sau șir de programe.

VAR Rusia; Rusia \u003d "Rusia"; Funcția GetValuerusssia () (Alertă (Rusia);) Getvaluerusia ();

Aici Rusia este o variabilă globală, deoarece este declarată în afara funcției. Pentru a dovedi că variabila este globală, ne-am întors spre el din interior personalizat Getvalualuerussia () Funcțiile utilizând funcția Alert () care a transformat valoarea variabilei Rusiei.

Variabile locale în JavaScript

Variabilele locale din JavaScript sunt declarate în interiorul funcțiilor. Puteți accesa variabilele locale numai în interiorul funcției în care sunt declarate.

Funcția Getvaluerussia () (VAR Rusia; Rusia \u003d "Rusia";) Alertă (Rusia);

ÎN acest exemplu, nu se va întâmpla nimic (Fereastra cu inscripția "Rusia" nu va apărea)Și dacă răsfoiți scenariul prin consola, atunci ne va spune faptul că variabila Rusiei nu este definită (nedefinită), ceea ce înseamnă că alerta de funcții () (plasată în afara funcției) nu vede variabila Rusiei care este creat în interiorul funcției.

Funcția GetValuerusssia () (VAR Rusia; Rusia \u003d "Rusia"; Alertă (Rusia);) Getvaluerusia ();

După plasarea alertei funcției () în interiorul funcției și apoi provocând funcția GetValueRussia (), vom vedea fereastra cu inscripția "Rusia". Aceste exemple ne arată că variabilele locale pot fi aplicate numai în interiorul funcției în care acestea sunt create.

Variabile globale în JavaScript

Ce este variabilele globale: variabilele "vizibile" în orice punct de execuție a programului, oriunde puteți citi și suprascrie.
De obicei, variabilele globale sunt determinate la începutul programului, în afara blocurilor (())
În cazul JS, ele sunt stabilite după script sau toate tipurile de funcții

salut \u003d "salut"; // setați variabila globală și verificați-o
Document.writeln ("-\u003e 1" + Hello + "fiecare
"); //-\u003e 1 salut fiecare

Daca e adevarat)
// dacă (fals)
{
Var Hello \u003d "Hello Dolly și"; // este, de asemenea, global
Lume \u003d "lume"; // Global
Var Control \u003d ", Continuăm" // Global
Document.writeln ("-\u003e 1.2" + Hello + World + Cont + "
");
//1.
}
Document.writeln ("-\u003e 2" + Hello + World + Cont + "
");
// -\u003e 2 Hello Dolly și Lumea, continuăm

Cu condiția ca primim răspunsul

-\u003e 1 Bunătate la fiecare
-\u003e 1.2 Bună ziua Dolly și Lumea, continuăm
-\u003e 2 Hello Dolly și Lumea, continuăm

Execuția se sparge

Astfel, se pare că zona globală, var Var nu afectează pe nimeni. Variabila menționată în script în afara procedurilor este considerată globală, chiar dacă aceasta încheie în paranteze () din Dacă în timp ce blocul și alte zone vor rămâne globale chiar și în interiorul ciclurilor

Concluzii, pe scurt

* Pentru variabilele utilizate în zona de vizibilitate globală, prezența varului nu este importantă.
* Blochează după caz \u200b\u200bdacă pentru a nu crea o zonă de vizibilitate locală (așa cum se întâmplă în alte limbi)

Local variabile - variabile Definit în blocul executabil (funcțiile) și nu câștigă alte funcții. și mediul extern, adică Regiunea globală.

Băiat \u003d "jhone";
A făcut \u003d "ucide kenny"; // Deci, avem 2 variabile globale
Funcția Doit ()
{
// a trecut deja sigiliul --1 și schimbăm datele prin schimbarea datelor
Var Boy \u003d "Gary"; // Creați local.
A făcut \u003d "îi ajută pe Anny"; // Schimbați Global.
;
Document.writeln ("- 2" + băiat + "" + a făcut + "
");
// - 2 Gary îi ajută pe Anny
;
// În interiorul funcției, setați variabilele locale și globale
Var bun \u003d "El a fost un băiat bun
"; // local!
Rău \u003d "îi place o fete proaste
"; // Global
}
;
Document.writeln ("- 1" + băiat + "" + a făcut + "
");
// - 1 jhone ucide kenny
Fă-o ();
// - 2 Gary îi ajută pe Anny
Document.writeln ("- 3" + băiat + "" + a făcut + "
");
// - 3 Jhone îi ajută pe Anny
;
Daca e adevarat)
// dacă (! fals)
{
Document.writeln ("- 4" + bun);
// Efectuați acest bloc va provoca o eroare.
// suntem acum în afara area locala Vizibilitate
// Doit () Funcții, deci pentru noi stabilit prin var
// Variabila bun pur și simplu nu există
}
Document.writeln ("- 5" + rău);
// - 5 Îi place o fete proaste

Rezultat:

1 Jhone ucide Kenny
- Gary îi ajută pe Anny
- Jhone îi ajută pe Anny
- Îi place o fete proaste

Variabile locale în JavaScript

* var funcționează în interiorul funcției, anunțând o variabilă locală. Aceasta este sarcina sa principală.

* JavaSprip este foarte diferit de SI deja că numai (?) În interiorul funcției, sunt posibile variabile locale.
* Utilizarea varului sau nu utilizați în domeniul global depinde numai de dvs. experienta personala. Dar pentru mine nu este atât de bine. În Pearl, aceasta se numește UTILIZARE STRICT

\u003e\u003e\u003e pentru variabilele utilizate în zona de vizibilitate globală, prezența varului

Important. În primul rând, "varia" nu poate fi șters (folosind ștergerea). În al doilea rând, concretizarea lor are loc pe "linia zero" (înainte de "linia" de lucru "), unde sunt atribuite imediat la nedefinit și numai atunci variabila poate obține (și nu poate primi) o nouă valoare:

Var gb_1 \u003d 1;
dacă (FALSE) (VAR GLB_2 \u003d 2; GLB_3 \u003d 3;)

ALERT (GLB_1) // Valoarea specificată și primită 1
Alert (GLB_2) // NotsTize și Recomandat "Undefined"
Alertă (GLB_3) // nu este o variabilă deloc (NO var), eroare la contact