Rozsah funkčných premenných v JavaScripte - Globálne a lokálne premenné. Rozsah premenných jazyka Javascript Miestne a globálne premenné

Domov / Inštalácia programov

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

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

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

IN programový kód Na globálny objekt najvyššej úrovne možno odkazovať aj pomocou kľúčového slova this:

Alert(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; alert(window.num); // 10

Namiesto deklarovania premennej pomocou kľúčového slova var môžete premennú vytvoriť explicitným zadaním novej vlastnosti pre objekt Window:

Window.num = 10; alert(num); // 10

Všimnite si, že hoci globálne premenné sú v skutočnosti vlastnosti objektu Window, nie je potrebné pridávať pred názov premennej predponu:

Var num = 10; alert(num); // 10 alert(window.num); // 10. Rovnaké ako alert(num);

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

Var num = 10; alert(delete num); // 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, t.j. môžu byť vymazané pomocou operátora delete:

Num = 10; alert(delete num); // true, premenná zmazaná

Metódy Popis metódy
decodeURI()Vráti reťazec obsahujúci dekódovaný identifikátor URI.
decodeURIComponent()Vráti reťazec obsahujúci dekódovanú časť URI.
encodeURI()Vráti reťazec obsahujúci zakódovaný identifikátor URI.
encodeURIComponent()Vráti reťazec obsahujúci zakódovanú časť URI.
eval()Funkcia eval() vykoná kód, ktorý jej bol odovzdaný ako reťazec. Kód odovzdaný funkcii sa vykoná v rozsahu, v ktorom bola funkcia volaná.
isFinite()Konvertuje argument na číslo (ak je to potrebné) a vráti hodnotu true, ak argument obsahuje inú hodnotu ako NaN, kladné nekonečno a 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.

Dobrý deň, fanúšikovia JavaScriptu a moji verní odberatelia. V dnešnom príspevku vám podrobne poviem, ako sa v JavaScripte vytvárajú globálne a lokálne premenné. Určite zadefinujem dôležité pojmy, porozprávam o vlastnostiach deklarovania a inicializácie premenných, popíšem, čo je rozsah a ako v ňom fungujú vytvorené prvky.

To všetko platí pre tie najzákladnejšie, základné znalosti jazyka. Bez toho, aby ste tomu všetkému porozumeli, nebudete schopní napredovať a rozvíjať svoje zručnosti v programovaní js. Kľúčové pojmy sa vám navyše budú hodiť nielen v tejto špecializácii, ale aj v IT oblasti všeobecne. Nuž, začnime!

Čo je to premenná a ako sa vytvára?

Premenná je prvok programovacieho jazyka, pre ktorý je pridelená pamäťová oblasť a v ktorej sú uložené určité hodnoty.

Môže existovať veľké množstvo premenných a všetky musia mať jedinečný názov.

Existujú dva typy premenných: globálne a lokálne. Ich rozdiel spočíva len v rôznom rozsahu premenných. Globálne prvky sú teda viditeľné v celom kóde a lokálne prvky sú viditeľné iba v malej oblasti, kde boli deklarované.

Mimochodom, snažte sa od prvého dňa, od prvého kódu, nazývať prvky logickými a zrozumiteľnými názvami. Pretože neskôr, keď budete pracovať s ťažkými programami, po určitom čase si nebudete pamätať, čo znamená napríklad „aa1“ alebo „perem3“.

A z názvu nie je jasné absolútne nič! Nie je to také zlé, koniec koncov, nie je také ťažké porozumieť svojim vlastným spisom. Čo urobíte, ak dostanete za úlohu dokončiť úlohy v inom programe, o ktorom ste nikdy predtým ani nepočuli? S takýmito názvami vám analýza implementácie softvéru zabije veľa užitočného času.

Prečítal som si zápis, teraz sa vráťme k deklarovaniu premenných.

Ak chcete vytvoriť premennú, musíte najskôr napísať kľúčové slovo var a potom samotný názov. Takto to vyzerá:

var text = "Dobrý deň, používateľ!"

Potom sa k textu pristupuje bez „var“:

text = "Nový text."

V tomto prípade sa hodnota prepíše.

Pre lepšie pochopenie zvážte príklad, v ktorom je vytvorená jedna premenná. Prejdeme k jeho významu pred a po prepísaní.

1 2 3 4 var text = “Dobrý deň, používateľ!”; upozornenie(text); // vypíše „Ahoj, používateľ!“ text= “Nový text!”; upozornenie(text); // vypíše „Nový text!“

var text = “Dobrý deň, používateľ!”; upozornenie(text); // vypíše „Ahoj, používateľ!“ text= “Nový text!”; upozornenie(text); // vypíše „Nový text!“

Vlastnosti globálnych objektov

Všetky vytvorené objekty v kóde js sú rozdelené na globálne a lokálne. Vyššie som vysvetlil, aký je medzi nimi rozdiel. Teraz sa pozrime bližšie na globálne objekty.

Sú to všetky funkcie a premenné, ktoré sú deklarované v hlavnom tele kódu, t.j. nie v rámci žiadnych funkcií. Všetky sa v js automaticky stávajú vlastnosťami globálneho objektu, ktorý je v prehliadačoch prehľadne dostupný pod oknom slova. Pozrime sa na príklad.

var cena = 145; // vytvorenie globálnej premennej

upozornenie(okno.cena); // odpoveď: 145

Zatiaľ je všetko jednoduché, no pripravte sa na nástrahy. Niekedy bez toho, aby ste poznali špecifiká ukladania a prepisovania hodnôt premenných, môžete prepísať veľmi dôležité parametre. Takéto chyby je dosť ťažké vystopovať a nie je možné ich nájsť pomocou kompilátorov. Preto pozorne analyzujte nasledujúci materiál.

Úskalia a rozsah

Pre lepšie pochopenie problému najprv ukážem malý program, kde vo funkcii vytvorím lokálnu premennú, a potom mimo jej hraníc - globálnu.

test funkcie() ( p = 2; return p; ) alert(p); // nedefinované p = “dôležitý text”; upozornenie(p); // zobrazí „dôležitý text“ test(); // vyvolanie funkcie alert(p); // vytlačí 2

Najprv som v testovacej funkcii inicializoval lokálnu premennú s hodnotou 2 a potom som vytvoril globálnu textovú premennú, ktorá ukladá niektoré dôležité údaje.

A tu sa objaví „podvodný blok“.

Jednak vďaka tomu, že som použil vytváranie prvkov podľa pravidiel zastaraného JavaScriptového štandardu, všetky “p” premenné boli vytvorené až v čase priradenia (pri použití direktívy var sa premenné vytvárajú okamžite s hodnotou nedefinované a počas inicializácie cez „= » sa hodnota prepíše).

Po druhé, v tomto prípade na priradenie hodnoty implicitne vytvoreným prvkom v js sa použije existujúca alebo sa vytvorí nová globálna premenná. Preto sa vo vyššie uvedenom príklade po zavolaní testovacej funkcie stratila hodnota globálneho „p“.

Aby ste predišli zlyhaniam, vždy používajte kľúčové slovo var. Potom budú všetky objekty explicitne deklarované a budú vytvorené nové.

Tu je opravený príklad:

test funkcie () ( var p = 2; výstraha (p); návrat p; ) výstraha (p); // nedefinované var p = "dôležitý text"; upozornenie(p); // zobrazí „dôležitý text“ test(); // zavolá funkciu, v tomto prípade zobrazí 2 alert(p); // zobrazí "dôležitý text"

Teraz kód funguje správne. Ako ste si všimli, rozsah lokálneho „p“ je v rámci testovacej funkcie a globálny je vo zvyšku kódu.

Pár slov o konštantách

Ako všetky ostatné programovacie jazyky, aj JavaScript má konštanty. Pre tých, ktorí nevedia, čo to je, pripájam definíciu.

Konštanta je typ premennej, ktorej hodnota zostáva nezmenená.

Podľa pravidiel syntaxe v js sa ich názov vždy píše malými (veľkými) písmenami. napr.

var MAIN_COLOR = “#fff”

Nie v skriptovacom jazyku technické prostriedky, čo by z konštanty urobilo skutočne konštantu. V skutočnosti sú to obyčajné premenné, ktoré sa dajú prepísať. Podľa pravidiel však vývojári používajú tieto prvky s veľkými písmenami v názve ako konštanty a nemenia ich význam pri písaní kódu.

Hlavným účelom konštánt je ukladanie zložitých reťazcov, dôležitých čísel alebo iných hodnôt, v ktorých pri prepisovaní je ľahké urobiť preklep alebo by sa nemali nikdy meniť, prípadne zjednodušiť kód. Napríklad konštanty možno použiť na ukladanie často sa opakujúcich požiadaviek

Premenné slúžia ako „kontajnery“ na ukladanie informácií.

Pamätáte si stredoškolskú algebru?

Pamätáte si školskú algebru? x=5, y=6, z=x+y

Pamätáte si, že písmeno (napr. x) by sa dalo použiť na uloženie hodnoty (napr. 5) a že by ste mohli použiť vyššie uvedené informácie na výpočet, že hodnota z je 11?

Tieto písmená sa nazývajú premenné a premenné možno použiť na ukladanie hodnôt (x=5) alebo výrazov (z=x+y).

Premenné JavaScriptu

Rovnako ako v algebre, premenné JavaScript sa používajú na ukladanie hodnôt alebo výrazov.

Premenná môže mať krátky názov, napríklad x, alebo popisnejší názov, napríklad carname.

Pravidlá pre názvy premenných JavaScript:

  • V názvoch premenných sa rozlišujú malé a veľké písmená (y a Y sú dve rôzne premenné)
  • Názvy premenných musia začínať písmenom alebo podčiarkovníkom

Poznámka: Keďže JavaScript rozlišuje veľké a malé písmená, v názvoch premenných sa rozlišujú aj malé a veľké písmená.

Príklad

Hodnota premennej sa môže počas spustenia skriptu meniť.

Na premennú môžete odkazovať jej názvom a zobraziť alebo zmeniť jej hodnotu.

Deklarovanie (vytváranie) premenných JavaScriptu

Vytváranie premenných v JavaScripte sa častejšie označuje ako „deklarovanie“ premenných.

Premenné jazyka JavaScript deklarujete pomocou kľúčového slova var:

Po vykonaní vyššie uvedených príkazov bude premenná x obsahovať hodnotu 5 a carname bude obsahovať hodnotu Mercedes. Poznámka: Keď priradíte textová hodnota

premenná, uzatvorte ju do úvodzoviek.

Poznámka: Ak premennú deklarujete znova, nestratí svoju hodnotu.

Miestne premenné JavaScriptu Premenná deklarovaná vo vnútri JavaScript funkcie

sa zmení na LOCAL a bude k dispozícii iba v rámci tejto funkcie.

(premenná má lokálny rozsah).

Lokálne premenné s rovnakým názvom môžete deklarovať v rôznych funkciách, pretože lokálne premenné sú rozpoznané vo funkcii, v ktorej sú deklarované.

Lokálne premenné sa pri ukončení funkcie zničia.

Viac o funkciách sa dozviete v nasledujúcich lekciách JavaScriptu.

Globálne premenné JavaScriptu

Premenné deklarované mimo funkcie sa stanú GLOBÁLNYMI a všetky skripty a funkcie na stránke k nim majú prístup.

Globálne premenné sa po zatvorení stránky zničia.

Ak deklarujete premennú bez použitia "var", premenná sa vždy zmení na GLOBÁLNU.

Priradenie hodnôt k nedeklarovaným premenným JavaScriptu

Ak priradíte hodnoty premenným, ktoré ešte neboli deklarované, premenné sa automaticky deklarujú ako globálne premenné.

Tieto ponuky:

Viac o operátoroch sa dozviete v ďalšej lekcii JavaScriptu.

Posledná aktualizácia: 04/05/2018

Všetky premenné v JavaScripte majú špecifický rozsah, v rámci ktorého môžu pôsobiť.

Globálne premenné

Všetky premenné, ktoré sú deklarované mimo funkcií, sú globálne:

var x = 5; nech d = 8; function displaySquare())( var z = x * x; console.log(z); )

Tu sú premenné x a d globálne. Sú dostupné odkiaľkoľvek v programe.

Premenná definovaná vo funkcii je lokálna:

Funkcia displaySquare())( var z = 10; console.log(z); nech b = 8; console.log(b); )

Premenné z a b sú lokálne, existujú len v rámci funkcie. Nemožno ich použiť mimo funkcie:

Funkcia displaySquare())( var z = 10; console.log(z); ) console.log(z); //chyba, pretože z nie je definované

Keď funkcia skončí svoju prácu, všetky premenné definované vo funkcii sa zničia.

Skrytie premenných

Čo ak máme dve premenné – jednu globálnu a druhú lokálnu – ktoré majú rovnaký názov:

Var z = 89; function displaySquare())( var z = 10; console.log(z); // 10 ) displaySquare(); // 10

V tomto prípade funkcia použije premennú z, ktorá je definovaná priamo vo funkcii. To znamená, že lokálna premenná skryje globálnu.

var alebo let

Pri použití príkazu let každý blok kódu definuje nový rozsah, v ktorom premenná existuje. Napríklad môžeme súčasne definovať premennú na úrovni bloku a na úrovni funkcie:

Nech z = 10; function displayZ())( nech z = 20; ( nech z = 30; console.log("Blok:", z); ) console.log("Function:", z); ) displayZ(); console.log("Globálne:", z);

Tu, vo vnútri funkcie displayZ, je definovaný blok kódu, v ktorom je definovaná premenná z. Skryje globálnu premennú a premennú z definovanú na úrovni funkcie. IN skutočný program blok môže predstavovať vnorenú funkciu, blok pre slučku alebo ak konštrukty. Ale v každom prípade takýto blok definuje nový rozsah, mimo ktorého premenná neexistuje.

A v v tomto prípade dostaneme nasledujúci výstup konzoly:

Blok: 30 Funkcia: 20 Globálne: 10

Pomocou operátora var nemôžeme definovať premennú s rovnakým názvom vo funkcii aj v bloku kódu v rámci tejto funkcie:

Funkcia displaySquare())( var z = 20; ( var z = 30; // Chyba! Premenná z je už definovaná console.log("Block:", z); ) console.log("Function:", z) ;

To znamená, že pomocou var môžeme definovať premennú s jedným názvom buď na úrovni funkcie alebo na úrovni bloku kódu.

Konštanty

Všetko, čo platí pre operátor let, platí aj pre operátor const, ktorý umožňuje definovať konštanty. Bloky kódu definujú rozsah konštánt a konštanty definované na vnorených blokoch kódu skrývajú externé konštanty s rovnakým názvom:

Const z = 10; function displayZ())( const z = 20; ( const z = 30; console.log("Blok:", z); // 30 ) console.log("Function:", z); // 20 ) displayZ ( ); console.log("Globálne:", z); // 10

Nedeklarované premenné

Ak toto kľúčové slovo nepoužijeme pri definovaní premennej vo funkcii, potom bude takáto premenná globálna. Napríklad:

Funkcia bar())( foo = "25"; ) bar(); console.log(foo); // 25

Aj keď premenná foo nie je definovaná nikde mimo funkcie bar, napriek tomu je dostupná mimo funkcie v externom kontexte.

Iné by to bolo, keby sme premennej nielen priradili hodnotu, ale ju aj definovali:

Funkcia bar())( var foo = "25"; ) bar(); console.log(foo); // chyba

prísny režim

Definovanie globálnych premenných vo funkciách môže viesť k potenciálne chyby. Ak sa im chcete vyhnúť, použite prísny režim:

"používať prísne"; function bar())( foo = "25"; ) bar(); console.log(foo);

V tomto prípade dostaneme chybu SyntaxError: Unexpected identifier, ktorá indikuje, že premenná foo nie je definovaná.

Existujú dva spôsoby, ako nastaviť prísny režim:

    pridajte výraz „použiť prísne“ na začiatok kódu JavaScript, potom sa na celý kód použije prísny režim

    na začiatok tela funkcie pridajte výraz „použiť prísne“, potom sa prísny režim použije iba na túto funkciu

Premenné

Deklarovanie premenných

Pred použitím premennej v JavaScripte musí byť deklarovaná. Premenné sa deklarujú pomocou kľúčového slova var takto:

Var i; var sum;

Jedným použitím kľúčového slova var môžete deklarovať viacero premenných:

Deklarovanie 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á je deklarovaná, ale jej počiatočná hodnota zostáva nedefinovaná, kým ju program nezmení.

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

Var i = 10; i = "ahoj";

Pomocou príkazu var môžete tú istú premennú deklarovať viackrát. Ak opakovaná 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 poskytovanom štandardom ECMAScript 5 sa pri pokuse o priradenie hodnoty nedeklarovanej premennej objaví aj chyba. Ak však historicky, a keď sa nespustí v prísnom režime, 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ť takmer rovnako ako správne deklarovaná premenná. To znamená, že globálne premenné nemusia byť deklarované. Toto sa však považuje za zlozvyk a môže spôsobiť chyby, 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 tele 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á, globálna premenná bude v skutočnosti skrytá:

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

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

© 2024 ermake.ru -- O oprave PC - Informačný portál