Co byste měli vědět o JavaScriptu [2]: JavaScript nemá „block-level scope“

V dnešním velice krátkém dílu se zmínim o drobnosti, kterou by měli mít na paměti hlavně programátoři přicházející z jazyků jako je Java či C#. Vývojáře znalé třeba PHP ale zajisté nijak nezaskočí, ti zde budou jako doma. V JavaScriptu (podobně jako v PHP) je totiž lokální proměnná platná vždy v rámci celé funkce.

Oproti tomu ve zmiňované Javě je platnost omezena na blok kódu.

// Java
public void funkce() {
    int  i = 10;
    for (int i =0; i < 15; i++) {
        System.out.println("Uvnitr bloku i: " + i);
    }
    System.out.println("Vne bloku i: " + i);

}

V uvedném kódu překryje proměnná i deklarovaná v záhlaví cyklu vnější proměnnou i.

V Javascriptu ale následující zápis postrádá smysl:

// JavaScript
function funkce() {
    var i = 10;

    for (var i = 0; i < 6; i++) {
        //neco...
    }

    for (var i = 0; i < 68; i++) {
        //neco jineho
    }

}

Proměnná i bude prostě jenom jedna, bez ohledu na počet použití klíčového slova var.

S oborem platnosti na úrovni funkce silně souvisí další zajímavá vlastnost, nazývaná „variable hoisting“. Proberu ji příště.