• 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
82 wizyt
pytanie zadane 31 stycznia w JavaScript, jQuery, AJAX przez jarok Bywalec (2,210 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 (78,620 p.)
Z ciekawości, uruchamiasz ten kod na jakiejś konkretnej stronie internetowej, czy coś lokalnego? Jaka przeglądarka?
komentarz 1 lutego przez jarok Bywalec (2,210 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 (78,620 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 Bywalec (2,210 p.)
A można jakoś sprawdzić, albo skasować tamtą zmienną?
komentarz 1 lutego przez JSHolic Szeryf (78,620 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,940 p.)

Co próbujesz tym osiągnać?

 

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

 

komentarz 31 stycznia przez jarok Bywalec (2,210 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 (94,910 p.)

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

Object

komentarz 31 stycznia przez jarok Bywalec (2,210 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 Bywalec (2,210 p.)
Nikt nie wie dlaczego tak się dzieje?

Podobne pytania

0 głosów
1 odpowiedź 44 wizyt
pytanie zadane 8 marca w JavaScript, jQuery, AJAX przez Bzytek Początkujący (450 p.)
0 głosów
0 odpowiedzi 148 wizyt
pytanie zadane 5 sierpnia 2018 w JavaScript, jQuery, AJAX przez criser Nowicjusz (210 p.)
0 głosów
0 odpowiedzi 103 wizyt
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

64,901 zapytań

111,373 odpowiedzi

234,337 komentarzy

46,748 pasjonatów

Przeglądających: 195
Pasjonatów: 12 Gości: 183

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.

...