Sobes.tech
Middle+

Existuje kód s vlastnoručne volanou funkciou (IIFE) s použitím var. Čo sa zobrazí v konzole pri volaní typeof a a typeof b mimo funkcie? Ako sa zmení správanie v prísnom režime?

sobes.tech AI

Odpoveď od AI

Ak sú vnútri IIFE deklarované premenné pomocou var, napríklad:

(function() {
  var a = 10;
  b = 20; // bez var
})();

console.log(typeof a); // "undefined"
console.log(typeof b); // "number"

Premenná a deklarovaná pomocou var vo vnútri funkcie je lokálna a nie je dostupná zvonku, preto typeof a vráti "undefined".

Premenná b, deklarovaná bez var, let alebo const, v nestriktívnom režime, vedie k vytvoreniu globálnej premennej. Preto typeof b vráti "number".

V prísnom režime ('use strict';), pokus o priradenie hodnoty nedeclarovanej premennej (b = 20;) spôsobí chybu ReferenceError, a globálna premenná nebude vytvorená. Takže, mimo funkcie, obe premenne nebudú dostupné, a typeof a a typeof b vrátia "undefined" (alebo bude chyba vyvolaná skôr).