1 gwiazdka2 gwiazdki3 gwiazdki4 gwiazdki5 gwiazdek (głosów: 1, średnia ocena: 5,00)
Loading...Loading...

Zakres dostępności zmiennych JavaScript

„Zakres” odnosi się do zmiennych dostępnych w danym bloku kodu, w określonym czasie. Niezrozumienie pojęcia zakresu często sprawia, że męczymy się z uciążliwymi usterkami.

Zmienna zadeklarowana wewnątrz funkcji poprzez słowo kluczowe var dostępna jest tylko w obrębie tej funkcji — nie można więc skorzystać z takiej zmiennej poza tą funkcją. Dostęp do tej zmiennej będą mieć natomiast funkcje zdefiniowane wewnątrz tej funkcji.

Ponadto zmienne zadeklarowane wewnątrz funkcji bez słowa kluczowego var nie są dla danej funkcji zmiennymi lokalnymi — JavaScript przeglądnie cały łańcuch zakresu aż do zakresu okna by ustalić, gdzie zmienna ta została zdefiniowana. Jeśli nie znajdzie tej definicji, zmienna ta zostanie potraktowana jako globalna, co może mieć zupełnie nieprzewidywalne konsekwencje.

Przykład 2.44. Funkcje mają dostęp do zmiennych zdefiniowanych w obrębie tego samego zakresu

var foo = 'witaj';
var przywitajSie = function() {
    console.log(foo);
};
przywitajSie();         // rejestruje witaj
console.log(foo);   // również rejestruje witaj

Przykład 2.45. Kod znajdujący się poza zakresem, w którym została zdefiniowana zmienna, nie ma dostępu do tej zmiennej

var przywitajSie = function() {
    var foo = 'witaj';
    console.log(foo);
};
przywitajSie();         // rejestruje witaj
console.log(foo);   // nic nie rejestruje

Przykład 2.46. Zmienne o takiej samej nazwie mogą znajdować się w różnych zakresach i przybierać różne wartości

var foo = 'świecie';
var przywitajSie = function() {
    var foo = 'witaj';
    console.log(foo);
};
przywitajSie();         // rejestruje witaj
console.log(foo);   // rejestruje świecie

Przykład 2.47. Po zdefiniowaniu funkcja może „zobaczyć” zmiany w wartościach zmiennych

var mojaFunkcja = function() {
    var foo = 'witaj';
    var mojaFn = function() {
        console.log(foo);
    };
    foo = 'świecie';
    return mojaFn;
};
var f = mojaFunkcja();
f();  // rejestruje 'świecie' – ups

Przykład 2.48. Zakresy mogą nas często przyprawić o ból głowy

// samowykonująca się funkcja anonimowa
(function() {
    var baz = 1;
    var bim = function() { alert(baz); };
    bar = function() { alert(baz); };
})();
console.log(baz);  // baz nie jest zdefiniowany poza zakresem funkcji
bar();  // bar jest zdefiniowany poza zakresem funkcji anonimowej
        // ponieważ nie został zadeklarowany przy pomocy słowa kluczowego var; ponadto
        // ponieważ został zdefiniowany w tym samym zakresie co baz,
        // bar ma dostęp do baz – zaś inny kod
        // poza zakresem funkcji tego dostępu nie ma
bim();  // bim nie jest zdefiniowany poza zakresem funkcji anonimowej,
        // w rezultacie wystąpi błąd

Inne artykuły poruszające podobny temat

CSSRegions.js ikona

CSSRegions.js

Dodaj komentarz









Newsletter

Subskrybując nasz newsletter masz pewność, że nie ominie Cię żadna nowość w serwisie!