Platnost proměnných

Uvnitř funkce můžete vytvářet proměnné pomocí let a const stejně jako kdekoli jinde. Taková proměnná ale existuje jen uvnitř funkce: vznikne, když se funkce spustí, a zanikne, když funkce skončí. Mimo funkci ji JavaScript nezná:

function pozdrav() {
    const zprava = "Ahoj!";
    console.log(zprava);
}

pozdrav();
console.log(zprava);

Tento kód vypíše Ahoj! a pak skončí chybou ReferenceError: zprava is not defined (zprava není definováno). Volání pozdrav() proběhlo v pořádku, ale poslední řádek hledá zprava mimo funkci, kde tato proměnná neexistuje. Stejné je to s parametry: existují jen uvnitř své funkce.

Části programu, ve které proměnná existuje, se říká obor platnosti proměnné (anglicky scope). Proměnná vytvořená uvnitř funkce je lokální: patří jen této funkci. Proměnnou vytvořenou mimo všechny funkce můžete používat v celém programu, i uvnitř funkcí:

const nazevObchodu = "Zverimex Packa";

function vypisStitek(produkt) {
    console.log(`${nazevObchodu}: ${produkt}`);
}

vypisStitek("krmivo pro psy");

Tento kód vypíše:

Zverimex Packa: krmivo pro psy

Proč je užitečné, že lokální proměnné zůstávají uvnitř svých funkcí?

  • Funkce si navzájem nepřekážejí. Dvě funkce mohou mít každá svou proměnnou celkem a jsou to dvě různé proměnné: změna jedné nezmění tu druhou.
  • Abyste mohli funkci použít, stačí vědět, co jí dát (argumenty) a co vrací (návratovou hodnotu). Jak funguje uvnitř, je její věc.
  • Každé volání začíná znovu: proměnné funkce vzniknou nanovo a nic z předchozího volání v nich nezůstane.

Když tedy potřebujete hodnotu zevnitř funkce, nesahejte po její proměnné. Vraťte hodnotu pomocí return a uložte si ji tam, kde funkci voláte.

Mimochodem, stejné pravidlo platí pro každý blok ve složených závorkách: proměnná vytvořená pomocí let nebo const uvnitř if nebo cyklu existuje jen v tomto bloku.

Pokyny

Program skončí chybou ReferenceError: celkem is not defined, protože celkem existuje jen uvnitř funkce. Opravte ho: vraťte celkem z funkce. Pod funkcí uložte výsledek volání cenaObjednavky(25, 4) do proměnné ucet a místo celkem vypište ucet. Program vypíše 100.

Ke každé objednávce se navíc platí 5 za dopravu. Nad funkcí vytvořte proměnnou doprava s hodnotou 5. Uvnitř funkce ji přičtěte k celkové ceně, aby program vypsal 105.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

7/10