Přejít k navigační liště

Zdroják » Zprávičky » JavaScript – problémy s kontextem

JavaScript – problémy s kontextem

Zprávičky JavaScript, Různé

Nálepky:

Že je JavaScript záludný jazyk, který neznalého dokáže řádně potrápit, není třeba zdůrazňovat. leckdy překvapí i znalého. Schválně, tipněte si, co vypíše následující kód:

var a = 10;
 
(function () {
  alert(a);
  var a = 20;
})();

Nezkoušejte ho, jen od pohledu tipněte:

Co vypíše kód?

Své řešení si můžete ověřit na příkladu.

Důvody tohoto chování popisuje Dmitry Soshnikov ve svém článku Two words about „hoisting“. Souvisí se způsobem, jakým JavaScript vytváří „kontext“ – nejprve alokuje použité proměnné, a až poté spustí kód. Umožňuje to například vytvořit v jednom kontextu vzájemnou rekurzi dvou funkcí. V naší ukázce to znamená, že při vyvolání funkce je nejprve vytvořen kontext, v něm je zastíněna globální proměnná „a“ lokální nedefinovanou, a pak je proveden kód.

Komentáře

Odebírat
Upozornit na
guest
10 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
Zobrazit všechny komentáře
petrblahos

Haha, trefil jsem to, ale jenom proto, že zprávička na začátku upozornila, že v tom bude háček…

nes_ro

Já tipnul undefined, protože tou funkcí se dělá vlastní namespace. :-)

Jakub Bouček

Já zase tipnul undefined ale proto, že na prvním řádku je deklarace se slovíčkem var, coč z Pixyho dřívějších článku, jako lokální proměnnou. Nevím, jak mě to napadlo, ale hlasoval jsem rychleji, než myslel, což se mi vyplatilo – tentokrát.

Jakub Bouček

ERRATA:
…což z Pixyho dřívějších článku chápu…

nes_ro

A jo… Máte pravdu, teď když se na to dívam podruhý už to vidím. Děkuju za opravu. :-)

_

javascript:na­me=1;alert(na­me===1);
Skúste tipnúť výsledok a vyskúšať v rôznych prehliadačoch.

_

Do predchádzajúceho kódu sa nejako dostal nejaký neviditeľný znak. Nie je v pridávaní príspevkov nejaká chyba?
javascript:na­me=1;alert(na­me===1);

Almad

….tak se chova spousta jazyku, treba i Python.

petrblahos

No, ne tak úplně. Python hodí chybu. Pro js je tohle platný kód, který normálně vykoná, a to je sakra velkej rozdíl.

global a # klidne i bez global
a = 100

def x():
    print a
    a = 200
x()

Ponaučení je, že ani v javascriptu není dobré psát jako prase, ikdyž k tomu ten jazyk vpodstatě vybízí…

Stack Overflow spouští AI Assist: nový nástroj pro moderní vývojáře

Stack Overflow představil AI Assist, nástroj, který propojuje generativní AI s rozsáhlou databází ověřených znalostí komunity. Platforma, která byla více než 18 let klíčovým zdrojem řešení pro vývojáře po celém světě, tím reaguje na změny ve způsobu práce s informacemi. Cílem AI Assist je zrychlit hledání odpovědí, zvýšit jejich spolehlivost a nabídnout kontext, který pomáhá lépe porozumět problému i řešení. Tento krok odráží trend, kdy se vývojáři čím dál více obracejí na nástroje, které dokážou kombinovat rychlost AI s ověřenými znalostmi komunity. AI Assist se tak stává mostem mezi tradičním Q&A formátem a moderními interaktivními asistenty.

Austrálie vs. sociální sítě: ochrana dětí nebo absurdní regulace?

Různé
Komentáře: 1
Austrálie chystá razantní krok – od prosince 2025 budou děti mladší 16 let muset opustit sociální sítě. Ministryně komunikací Anika Wells ujistila, že vláda se nenechá zastrašit technologickými giganty. Zákon má chránit mladé uživatele před negativními dopady online světa, ale kritici varují, že může vést spíš k obcházení pravidel než k reálné ochraně.

Tor přechází na nový šifrovací algoritmus CGO

Různé
Komentáře: 0
Tor Project představil nový šifrovací algoritmus Counter Galois Onion (CGO), který nahrazuje zastaralý systém tor1. CGO přináší výrazně lepší ochranu proti manipulaci a sledování, zajišťuje forward secrecy a silnou autentizaci přenášených dat, přičemž zachovává vysokou výkonnost a nízkou režii provozu.