Middle+
Ką konsolėje parodytų, kai išorėje iškviečiame typeof a ir typeof b iš IIFE funkcijos, naudojant var? Kaip pasikeis elgsena griežtame režime?
sobes.tech AI
Atsakymas iš AI
Jei viduje IIFE yra deklaruojamos kintamosios naudojant var, pavyzdžiui:
(function() {
var a = 10;
b = 20; // be var
})();
console.log(typeof a); // "undefined"
console.log(typeof b); // "number"
Kintamoji a, deklaruota naudojant var funkcijos viduje, yra lokali ir išorėje prieinama nėra, todėl typeof a grąžins "undefined".
Kintamoji b, deklaruota be var, let ar const, nestrikto režimo metu sukuria globalią kintamąjį. Todėl typeof b grąžins "number".
Griežto režimo ('use strict';) metu, bandymas priskirti reikšmę ne deklaruotam kintamajam (b = 20;) sukels ReferenceError, ir globalus kintamasis nebus sukurtas. Taigi, už funkcijos ribų abi kintamosios nėra pasiekiamos, ir typeof a bei typeof b grąžins "undefined" (arba bus išmestas klaidos praeityje).