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