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í…

Clawdbot (Moltbot): osobní AI agent, který vykonává práci za vás

AI
Komentáře: 2
Clawdbot, dnes známý jako Moltbot, není jen další chatbot – je to osobní AI agent, který umí přímo vykonávat úkoly, místo aby jen radil. Stačí mu zadat cíl, a on sám zpracuje e-maily, plánuje schůzky, vyhledává informace nebo spouští skripty. Open-source a self-hosted přístup zajišťuje plnou kontrolu nad daty i nástroji, a dává tak uživatelům možnost mít vlastního digitálního asistenta, který skutečně pracuje za ně.

Skutečná cena mikroslužeb: výkon, složitost a režie

Mikroslužby slibují flexibilitu, nezávislé nasazování a snadné škálování týmů. Ve skutečnosti však každé síťové volání přidává latenci, zvyšuje režii a komplikuje dostupnost. Tento článek ukazuje, proč i jednoduché workflow může být v mikroslužbách pomalejší než v monolitu, doplněno o čísla, kód a praktické tipy pro rozhodování mezi architekturami.