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).