• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dziwny Uncaught ReferenceError?

0 głosów
77 wizyt
pytanie zadane 31 stycznia w JavaScript, jQuery, AJAX przez jarok Obywatel (1,190 p.)

Dlaczego błąd nie pojawia się dla zmiennej name?

function print() {
    {
        let name = 'name';
        let example = 'example';
        let x = 10;
    }

    console.log('name =', name);
    console.log('example =', example);
    console.log('x =', x);
}

print();

 

1
komentarz 31 stycznia przez JSHolic Szeryf (77,560 p.)
Z ciekawości, uruchamiasz ten kod na jakiejś konkretnej stronie internetowej, czy coś lokalnego? Jaka przeglądarka?
komentarz 1 lutego przez jarok Obywatel (1,190 p.)
Lokalnie w przeglądarce Opera oraz Chrome. Tu i tu taki sam efekt.

4 odpowiedzi

+1 głos
odpowiedź 31 stycznia przez JSHolic Szeryf (77,560 p.)

Obstawiam, że masz globalną zmienną (czyli w obiekcie window) o nazwie name, ponieważ - jak widać na screenie - jest tam pusty string, albo coś podobnego. A nie pojawia się dla tej zmiennej błąd, bo JS w momencie gdy nie znalazł tej zmiennej w lokalnym scope to poszukał wyżej.

komentarz 1 lutego przez jarok Obywatel (1,190 p.)
A można jakoś sprawdzić, albo skasować tamtą zmienną?
komentarz 1 lutego przez JSHolic Szeryf (77,560 p.)

Skasować taką zmienną możesz poprzez operator delete, ale dlatego, ponieważ zmienne globalne deklarowane słówkiem var są przypisywane jako property do obiektu window - dzieje się tak też dla zmiennych globalnych tworzonych bez żadnego słówka (tzw. implicit global variable). Ten sposób nie zadziała jednak, jeśli zmienna globalna została utworzona słówkami let lub const. Wtedy taka zmienna nie należy do obiektu window.

Jeśli chodzi o sprawdzenie istnienia takiej zmiennej, to możesz zweryfikować "naocznie" po prostu wyświetlając ją w konsoli (tak jak zrobiłeś), albo przez sprawdzenie, czy takie property nie jest wartością undefined (lub nie jest takiego typu), albo przez operator in. Przykłady:

window.name !== undefined // true
typeof window.name !== 'undefined' // true
'name' in window // true 
0 głosów
odpowiedź 31 stycznia przez ShiroUmizake Nałogowiec (44,340 p.)

Co próbujesz tym osiągnać?

 

   {
        let name = 'name';
        let example = 'example';
        let x = 10;
    }

 

komentarz 31 stycznia przez jarok Obywatel (1,190 p.)

Chcę sprawdzić zakres zmiennych z wykorzystaniem słowa kluczowego let. Zakres jest dla bloku {} stąd też nie powinna być możliwość odwołania się do ww. zmiennych.

0 głosów
odpowiedź 31 stycznia przez pablop76 Szeryf (89,150 p.)

Spóźniłem się więc edytowałem odpowiedź

Object

komentarz 31 stycznia przez jarok Obywatel (1,190 p.)

Chcę sprawdzić zakres zmiennych z wykorzystaniem słowa kluczowego let. Zakres jest dla bloku {} stąd też nie powinna być możliwość odwołania się do ww. zmiennych.

0 głosów
odpowiedź 31 stycznia przez jarok Obywatel (1,190 p.)
Nikt nie wie dlaczego tak się dzieje?

Podobne pytania

0 głosów
1 odpowiedź 40 wizyt
pytanie zadane 8 marca w JavaScript, jQuery, AJAX przez Bzytek Początkujący (390 p.)
0 głosów
0 odpowiedzi 106 wizyt
pytanie zadane 5 sierpnia 2018 w JavaScript, jQuery, AJAX przez criser Nowicjusz (210 p.)
0 głosów
0 odpowiedzi 86 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

62,370 zapytań

108,500 odpowiedzi

226,513 komentarzy

35,488 pasjonatów

Przeglądających: 291
Pasjonatów: 19 Gości: 272

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...