Middle+
Co bude zobrazeno v konzoli při volání typeof a a typeof b mimo funkce IIFE s použitím var? Jak se změní chování v režimu přísné kontroly?
sobes.tech AI
Odpověď od AI
Pokud jsou uvnitř IIFE deklarovány proměnné pomocí var, například:
(function() {
var a = 10;
b = 20; // bez var
})();
console.log(typeof a); // "undefined"
console.log(typeof b); // "number"
Proměnná a deklarovaná pomocí var uvnitř funkce je lokální a není dostupná zvenčí, proto typeof a vrátí "undefined".
Proměnná b deklarovaná bez var, let nebo const, v ne-striktním režimu, vede ke vzniku globální proměnné. Proto typeof b vrátí "number".
V přísném režimu ('use strict';) pokus o přiřazení hodnoty nedeclarované proměnné (b = 20;) způsobí chybu ReferenceError, a globální proměnná nebude vytvořena. Tím pádem, mimo funkci, obě proměnné nebudou dostupné, a typeof a a typeof b vrátí "undefined" (nebo bude chyba vyhozena dříve).