:sparkles: PWA :sparkles:
Twarz autora bloga

Piotr Kowalski

Organizator WarsawJS Trener YouTuber

Uważaj na "use strict", czyli Strict mode w praktyce


W specyfikacji ECMAScript 5 pojawiło się mnóstwo technik, które ułatwią proces developmentu każdemu programiście. Jednym z nich jest tzw. tryb ścisły (ang. strict mode).

Tryb ścisły kontroluje jakość naszego kodu źródłowego. Nie pozwala na stworzenie kodu, który jest okraszony błędnym działaniem (o tyle o ile - nie zostaną wykryte błędy niezwiązane z logiką biznesową).

Baner reklamujący artykuł

Jak włączyć?

Włączenie trybu ścisłego opiera się na dodaniu na początku pliku (bądź funkcji) takiej linijki:

"use strict";

Dzięki tej linijce, interpreter użyje bardziej restrykcyjnych warunków w swoim procesie analizy kodu i każdą niepoprawną konstrukcję potraktuje srogo.

Kilka przykładów

  • Jak tego w ogóle używać?

      // Tryb zwykły.
    
      (function () {
          "use strict";
          // Dla tej funkcji włączony jest tryb ścisłej interpretacji!
      }());
    
      // Tryb zwykły.
    
  • Czym włączenie trybu ścisłego skutkuje w kodzie?

      (function () {
          console.log(this); // Window
      }());
    
      (function () {
          "use strict";
          console.log(this); // undefined
      }());
    

Zmienne globalne

Ile razy przez przypadek zapomniałeś dodania wyrażenia var podczas definicji zmiennej? Raz na rok zdarza się to każdemu.

zmienna1 = 1; // Zmienna globalna zostanie utworzona.
// W tym zasięgu nie jest włączony tryb ścisły.

(function () {
    "use strict";
    zmienna2 = 2; // ReferenceError: zmienna2 is not defined
}());

To jak mam się odwołać do obiektu globalnego?

(function (root) {
    "use strict";

    // imports
    var $ = root.jQuery;
    var _ = root._;

}(this));

lub:

(function (root) {
    "use strict";

    // imports
    var $ = root.jQuery;
    var _ = root._;

}(window)); // <-- wcześniej tutaj był "this"

Ten drugi sposób nie zawsze zadziała. Istnieją mianowicie środowiska gdzie obiekt window nie jest dostępny.

Chyba najprostszym przykładem będzie Node.js, czyli aplikacja po stronie serwera. Na serwerze nie mamy dostępu do okna przeglądarki, więc obiekt window nie ma prawa istnieć. Jeśli chciałbyś uzyskać dostęp do globalnego obiektu w Node.js to skorzystać z obiektu global.

Drugim przykładem są silniki urządzeń, takich jak STB. Urządzenia te nie posiadają wewnętrznej przeglądarki do uruchamiania interpretera JavaScript.

Pełna lista niedozwolonych konstrukcji dostępna jest na portalu MDN. Zapraszam Cię do zapoznania się ze wszystkimi zakazanymi konstrukcjami.

Podsumowanie

Jeśli nie używasz Strict mode (a korzystasz ze składni ES5) to gorąco rekomenduję użycie. Pisanie aplikacji z użyciem tego trybu na pewno nie zaszkodzi a może pomóc.