JavaScript: globálny objekt. Premenné Ako urobiť lokálnu premennú globálnym javascriptom

V JavaScript, existujú dva rozsahy: lokálny a globálny. Závisí od toho, či je premenná deklarovaná vo vnútri funkcie alebo mimo funkcie.

Ak je premenná deklarovaná vo vnútri funkcie, potom sa nazýva lokálna, ak je premenná deklarovaná mimo funkcie, potom sa nazýva globálna.

Moderná koncepcia programovania odporúča, aby všetky premenné v skriptoch (programoch) boli lokálne a samotný program pozostával len z funkcií, kde by každá funkcia vykonávala len jednu úlohu. Napríklad v inom webovom programovacom jazyku PHP úplne upustili od používania globálnych premenných.

Globálne premenné v JavaScripte

Globálne premenné sú deklarované mimo funkcií a môžu byť prístupné (prístupné) z akejkoľvek funkcie alebo riadku kódu.

Var Rusko; russia = "Rusko"; function getValueRussia () (upozornenie (rusko);) getValueRussia ();

Rusko je tu globálna premenná, pretože je deklarovaná mimo funkcie. Aby sme dokázali, že premenná je globálna, obrátili sme sa na ňu zvnútra. zvykom funkciu getValueRussia () pomocou funkcie alert (), ktorá zobrazila hodnotu premennej russia.

Miestne premenné v JavaScripte

Lokálne premenné v JavaScripte sú deklarované vo funkciách. K lokálnym premenným je možné pristupovať iba v rámci funkcie, v ktorej sú deklarované.

Funkcia getValueRussia () (var russia; russia = "Rusko";) alert (russia);

V tento príklad, nič sa nestane (okno s nápisom „Rusko“ sa nezobrazí) a ak si skript pozriete cez konzolu, povie nám, že premenná russia je nedefinovaná, čo znamená, že funkcia alert () (umiestnená mimo funkcie) nevidí premennú russia, ktorá bola vytvorená vo funkcii.

Funkcia getValueRussia () (var russia; russia = "Rusko"; alert (russia);) getValueRussia ();

Umiestnením funkcie alert () do funkcie a následným volaním funkcie getValueRussia () sa nám zobrazí okno označené ako „Russia“. Tieto príklady nám ukazujú, že k lokálnym premenným je možné pristupovať iba v rámci funkcie, v ktorej sú vytvorené.


Pokračujeme v skúmaní témy funkcií v JavaScripte. Tu sa dotýkame konceptu variabilný rozsah... Úzko súvisí s funkciami, preto je dôležité jej porozumieť.

Treba sa naučiť (a rozlišovať medzi týmito pojmami) len jedna vec je, že existujú globálne a lokálne premenné.

Čo sú globálne premenné? Pozrime sa na príklad...

V tomto príklade sme vytvorili premennú s názvom global, ktorá je globálna – teraz ju môžeme použiť – napríklad vo vnútri funkcie, ako sami vidíte.

Toto je podstata globálnych premenných.- sú vytvorené raz (povedzme na začiatku skriptu, ako ste videli v príklade) a potom sa v prípade potreby použijú v programovom kóde (v poliach, funkciách atď.).

Čo sú lokálne premenné? Pozrime sa znova na príklad...

Tento príklad ilustruje vytvorenie lokálnej premennej local. Je to miestne, pretože vytvorené vo vnútri funkcie... A len vo vnútri sa dá použiť.

Ak sa pokúsime zobraziť túto premennú mimo funkcie, potom v okne prehliadača nič neuvidíme.

Na týchto jednoduché príklady preskúmali sme koncept variabilný rozsah v JavaScripte. Vyslovme ešte raz jej podstatu: ak vytvoríme premennú vo funkcii, potom je lokálna a môžeme s ňou pracovať iba v rámci tejto funkcie.

A premenné vytvorené mimo funkcie sa nazývajú globálne a možno ich použiť kdekoľvek, vrátane vnútri funkcie..

Premenné

Deklarovanie premenných

Pred použitím premennej v JavaScripte ju musíte deklarovať. Premenné sú deklarované s kľúčové slovo var nasledujúcim spôsobom:

Var i; var sum;

Pomocou kľúčového slova var raz môžete deklarovať viacero premenných:

Deklarácie premenných je možné kombinovať s ich inicializáciou:

Var message = "ahoj"; var i = 0, j = 0, k = 0;

Ak v príkaze var nie je zadaná žiadna počiatočná hodnota, premenná sa deklaruje, ale jej počiatočná hodnota zostane nedefinovaná, kým ju program nezmení.

Ak máte skúsenosti s programovacími jazykmi so statickými dátovými typmi, ako je C # alebo Java, môžete si všimnúť, že v deklaráciách premenných JavaScriptu nie je žiadna deklarácia typu. Premenné v JavaScripte môžu ukladať hodnoty akéhokoľvek typu. Napríklad v JavaScripte je povolené priradiť niektoré variabilné číslo a potom priraďte reťazec k rovnakej premennej:

Var i = 10; i = "ahoj";

Pomocou príkazu var môžete tú istú premennú deklarovať viackrát. Ak opätovná deklarácia obsahuje inicializátor, potom funguje ako bežný príkaz na priradenie.

Ak sa pokúsite prečítať hodnotu nedeklarovanej premennej, JavaScript vygeneruje chybu. V prísnom režime Štandard ECMAScript 5, chyba sa objaví aj pri pokuse o priradenie hodnoty nedeklarovanej premennej. Historicky a pri spustení v neprísnom režime však platí, že ak priradíte hodnotu premennej, ktorá nie je deklarovaná príkazom var, JavaScript vytvorí túto premennú ako vlastnosť globálneho objektu a bude sa správať v podstate rovnakým spôsobom ako správne deklarovaná premenná. To znamená, že nemusíte deklarovať globálne premenné. Toto sa však považuje za zlozvyk a môže byť zdrojom chýb, preto sa vždy snažte deklarovať svoje premenné pomocou var.

Variabilný rozsah

Rozsah premennej je časť programu, pre ktorú je premenná definovaná. Globálna premenná má globálny rozsah — je definovaná pre celý program JavaScript. Zároveň sú premenné deklarované vo vnútri funkcie definované iba v jej tele. Nazývajú sa miestne a majú miestny rozsah. Parametre funkcie sa tiež považujú za lokálne premenné, ktoré sú definované iba v tele danej funkcie.

V rámci tela funkcie má lokálna premenná prednosť pred globálnou premennou s rovnakým názvom. Ak deklarujete lokálnu premennú alebo parameter funkcie s rovnakým názvom ako globálna premenná, potom bude v skutočnosti globálna premenná skrytá:

Var vysledok = "global"; function getResult () (var vysledok = "local"; return vysledok;); console.log (getResult ()); // Zobrazí "local"

Pri deklarovaní premenných s globálnym rozsahom môžete vynechať príkaz var, ale pri deklarovaní lokálnych premenných by ste mali vždy použiť príkaz var.

JavaScript má tri rozsahy: globálny, funkčný a blokový. Variabilný rozsah je stránka zdrojový kód program, v ktorom sú premenné a funkcie viditeľné a použiteľné. Globálny rozsah sa tiež nazýva kód najvyššej úrovne.

Globálne premenné

Premenná deklarovaná mimo funkcie alebo bloku sa nazýva globálna. Globálna premenná je dostupná kdekoľvek v zdrojovom kóde:

Var num = 5; function foo () (console.log (num);) foo (); // 5 console.log (num); // 5 (console.log (číslo); // 5)

Lokálne premenné

Premenná deklarovaná vo funkcii sa nazýva lokálna. Lokálna premenná je dostupná kdekoľvek v tele funkcie, v ktorej bola deklarovaná. Lokálna premenná sa vytvorí znova pri každom volaní funkcie a zničí sa pri jej ukončení (keď sa funkcia ukončí):

Funkcia foo () (var num = 5; console.log (num);) foo (); // 5 console.log (typeof num); // nedefinované

Lokálna premenná má prednosť pred globálnou premennou s rovnakým názvom, čo znamená, že vo funkcii sa použije lokálna premenná, nie globálna:

Var x = "globálne"; // Funkcia globálnej premennej checkscope () (var x = "local"; // Lokálna premenná s rovnakým názvom ako globálna document.write (x); // Používa sa lokálna premenná, nie globálna) checkscope ( ); // => "local" Skúste "

Blokové premenné

Premenná deklarovaná vo vnútri bloku pomocou kľúčového slova let sa nazýva bloková premenná. Bloková premenná je dostupná kdekoľvek v bloku, v ktorom bola deklarovaná:

Nech num = 0; (nech num = 5; console.log (num); // 5 (nech num = 10; console.log (num); // 10) console.log (num); // 5) console.log (num) ; // 0

Znova oznámiť

Ak znova deklarujete premennú s rovnakým názvom (v rovnakom rozsahu) pomocou kľúčového slova var, nič sa nestane:

Var a = 10; var a; console.log (a); // 10

Ak je opätovná deklarácia sprevádzaná inicializáciou, potom takáto inštrukcia funguje ako normálne priradenie novej hodnoty:

Var a = 10; var a = 5; // Rovnaké ako a = 5; console.log (a); // 5

Ak znova deklarujete premennú s rovnakým názvom (v rovnakom rozsahu) pomocou kľúčového slova let, zobrazí sa chyba:

Var a = 10; nech a; // Chyba.

Reťazenie rozsahu

Zvážte nasledujúci príklad:

Var num = 5; function foo () (var num2 = 10; Function bar () (var num3 = 15;))

Tento kód má tri rozsahy: globálny, foo () a bar (). Premenná num a funkcia foo () sú definované v globálnom rozsahu. V rozsahu funkcie foo () je definovaná premenná num2 a funkcia bar () a je tam dostupná aj premenná num z globálneho rozsahu. Rozsah funkcie bar () obsahuje jednu premennú, num3, ktorá je dostupná iba vo funkcii bar (). Premenné z ďalších dvoch rozsahov sú dostupné aj v rozsahu funkcie bar (), pretože sú jej rodičmi. Reťazec rozsahu pre tento príklad je znázornený na obrázku nižšie:

Na obrázku sú rôzne rozsahy znázornené obdĺžnikmi rôznych farieb. Vnútorné rozsahy v reťazci rozsahov majú prístup ku všetkému z vonkajších rozsahov, ale vonkajšie rozsahy nemajú prístup k ničomu z vnútorných rozsahov.

Reťaz ďalekohľadu je objednaná. Tlmočník hľadá identifikátory v reťazci rozsahu smerom von, ale nie dovnútra. To znamená, že vyhľadávanie názvu začína od rozsahu, v ktorom sa pristupovalo k identifikátoru. Ak sa nájde názov identifikátora, vyhľadávanie sa zastaví. Ak meno nemožno nájsť v aktuálnom rozsahu, vykoná sa vyhľadávanie v ďalšom (vonkajšom) rozsahu atď.. Použije sa teda identifikátor z rovnakého rozsahu, v akom bol nájdený. Ak sa identifikátor nenájde v žiadnom z rozsahov, JavaScript vygeneruje chybu:

Var str = "globálne"; var num = 5; function foo () (var str = "local"; // Použitá lokálna premenná str num = 10; // Použitá globálna premenná num // výstraha (x); // Chyba. Premenná x nie je v žiadnom rozsahu) foo ( ) ; výstraha (str); // "globálne" upozornenie (num); // 10

Ak je hodnota priradená nedeklarovanej premennej v tele funkcie, potom v čase volania funkcie, ak v globálnom rozsahu neexistuje žiadna premenná s takýmto názvom, sa vytvorí nová globálna premenná:

Funkcia foo () (num = 2;) foo (); // Vytvorila sa nová globálna premenná num alert (num); // 2

Zdvíhanie reklám

V JavaScripte sú deklarované premenné dostupné kdekoľvek vzhľadom na ich rozsah, čo znamená, že premenné sú viditeľné ešte predtým, ako sú deklarované v kóde. Táto funkcia JavaScriptu sa neformálne nazýva zdvíhanie: programový kód sa správa tak, ako keby boli deklarácie premenných implicitne zdvihnuté (bez inicializácie) na úplný vrchol svojho rozsahu.

Zvážte nasledujúci kus kódu:

Var str = "globálne"; function foo () (alert (str); // nedefinované var str = "local"; alert (str); // "local") foo ();

Pri pohľade na kód by si človek myslel, že prvé upozornenie by malo vypísať reťazec „globálny“, pretože lokálna premenná str ešte nebola deklarovaná. V skutočnosti však vytlačí hodnotu nedefinovanú. Zdvihnutím deklarácií je funkcia uvedená vyššie ekvivalentná s implementáciou nižšie, v ktorej je deklarácia premennej zdvihnutá na začiatok funkcie:

Funkcia foo () (var str; // Deklarácia lokálnej premennej na začiatku výstrahy funkcie (str); // Tu je dostupná, ale neinicializovaná str = "local"; // Tu je inicializovaná výstraha (str ); // A tu to má očakávaný význam - "miestny")

To isté platí pre globálny rozsah, premenná deklarovaná v dolnej časti je dostupná v hornej časti:

Upozornenie (počet); // nedefinované var num = 10; výstraha (počet); // 10

Všetky globálne premenné a funkcie sú vlastne vlastnosti a metódy špeciálneho objektu tzv globálny objekt.

Globálny objekt je bežný objekt, ktorý sa vytvorí automaticky pri spustení tlmočníka.

V JavaScripte hrá objekt Window úlohu globálneho objektu. Tento objekt má vlastnosť okna, ktorá odkazuje na samotný objekt Window. Objekt Window je tiež globálny objekt a navyše obsahuje množstvo vlastných vlastností a metód pre prácu s oknom prehliadača.

V kóde najvyššej úrovne môžete tiež odkazovať na globálny objekt pomocou kľúčového slova this:

Upozornenie (toto === okno); // pravda

Keďže globálne premenné sú vlastnosti globálneho objektu, pri práci s globálnou premennou v skutočnosti pracujeme s vlastnosťami okna:

Var num = 10; upozornenie (window.num); // 10

Namiesto deklarovania premennej pomocou kľúčového slova var môžete vytvoriť premennú explicitným zadaním nových vlastností objektu Window:

Window.num = 10; výstraha (počet); // 10

Všimnite si, že aj keď sú globálne premenné v skutočnosti vlastnosti Okenný objekt, je voliteľné zadať ho pred názvom premennej:

Var num = 10; výstraha (počet); // 10 alert (window.num); // 10. Rovnaké ako upozornenie (num);

Ak je globálna premenná deklarovaná pomocou kľúčového slova var alebo let, vytvorí sa neprispôsobiteľná vlastnosť, teda vlastnosť, ktorú nemožno odstrániť pomocou operátora delete:

Var num = 10; upozornenie (vymazať číslo); // false, premenná sa nevymaže

Ak nedeklarovanej premennej priradíte hodnotu, interpret jazyka JavaScript automaticky vytvorí globálnu premennú. Takto vytvorené premenné sa stanú bežnými, užívateľskými vlastnosťami globálneho objektu, to znamená, že ich možno vymazať pomocou operátora delete:

Num = 10; upozornenie (vymazať číslo); // true, premenná bola odstránená

Metódy

MetódaPopis
decodeURI ()Vráti reťazec obsahujúci dekódované URI.
decodeURIComponent ()Vráti reťazec obsahujúci dekódovanú časť URI.
encodeURI ()Vráti reťazec obsahujúci zakódované URI.
encodeURIComponent ()Vráti reťazec obsahujúci zakódovanú časť URI.
eval ()Funkcia eval () spustí kód, ktorý jej bol odovzdaný ako reťazec. Kód odovzdaný funkcii sa vykoná v rozsahu, v ktorom bola funkcia volaná.
isFinite ()Skonvertuje argument na číslo (ak je to potrebné) a vráti hodnotu true, ak argument obsahuje inú hodnotu ako NaN, kladné alebo záporné nekonečno. V týchto troch prípadoch vráti hodnotu false.
isNaN ()Určuje, či odovzdaný argument je NaN alebo nie.
parseFloat ()Analyzuje argument reťazca a vráti číslo s pohyblivou rádovou čiarkou alebo NaN.
parseInt ()Analyzuje argument reťazca a vráti celé číslo alebo NaN.