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