Middle+
Co zostanie wyświetlone w konsoli po wywołaniu typeof a i typeof b spoza funkcji samowykonującej się (IIFE) z użyciem var? Jak zmieni się zachowanie w trybie strict?
sobes.tech AI
Odpowiedź od AI
Jeśli wewnątrz IIFE zadeklarowane są zmienne za pomocą var, na przykład:
(function() {
var a = 10;
b = 20; // bez var
})();
console.log(typeof a); // "undefined"
console.log(typeof b); // "number"
Zmienna a zadeklarowana za pomocą var wewnątrz funkcji jest lokalna i niedostępna na zewnątrz, dlatego typeof a zwróci "undefined".
Zmienna b zadeklarowana bez var, let lub const, w trybie nie-ściślejszym, powoduje utworzenie zmiennej globalnej. Dlatego typeof b zwróci "number".
W trybie ścisłym ('use strict';) próba przypisania wartości do niezadeklarowanej zmiennej (b = 20;) spowoduje błąd ReferenceError, a zmienna globalna nie zostanie utworzona. W ten sposób, poza funkcją, obie zmienne będą niedostępne, a typeof a i typeof b zwrócą "undefined" (lub błąd zostanie rzucony wcześniej).