Ach te internety!
  • React
  • Angular
  • JS
  • CSS
  • html
  • WP
  • A11Y
  • dev.
  • tools
  • off-topic
  • O mnie
Home  /  JS  /  Czemu var nie jest fajny?

Czemu var nie jest fajny?

Wrzesień 06, 2017 JS

Wszyscy dookoła trąbią: zapomnij o var, używaj const oraz let…

Ale czemu?

Bo var jest błędogenny. Z łatwością wprowadza zamieszanie w kodzie. let oraz const są bardziej wyraziste i zmniejszają prawdopodobieństwo wystąpienia błędów związanych z deklaracją zmiennych.

A czym one się różnią? Główną różnicą jest to, że var posiada funkcyjny zakres zmiennych (lub globalny dla zmiennych zadeklarowanych poza funkcją). Dla odmiany, const oraz let posiadają zakres blokowy (lub globalny dla zmiennych zadeklarowanych poza funkcją).

Z var mamy problem dotyczący hoistingu zmiennych (windowania / podnoszenia / przenoszenia deklaracji – jak zwał tak zwał). Możemy deklarować sobie zmienną var gdzieś na końcu kontekstu funkcji, a hoisting wyniesie inicjalizację zmiennej na samą górę. Prowadzi to do tego, że zmienna jest dostępna przed deklaracją. A to prosta droga do undefined (pisałam o undefined TUTAJ) lub innych niepożądanych zachowań aplikacji.

function myFunction() {
  //code...
  myVariable; //undefined
  //code...
  var myVariable = "Initial value";
  //code...
  myVariable; //"Initial value"
}
myFunction();

 

Dla odmiany, zmienne let/const nie są dostępne przed linią, w której są zadeklarowane. Przed deklaracją owe zmienne znajdują się w czasowo martwej strefie (temporal dead zone). A jak nie są dostępne, to i nie będzie undefined.

function myFunction() {
  //code...
  myVariable; //Throws "ReferenceError: myVariable is not defined"
  //code...
  let myVariable = "Initial value";
  //code...
  myVariable; //"Initial value"
}
myFunction();

Czy hoisting to jedyny problem vara? Oj nie. Warto też pamiętać, że var umożliwia redeklarację zmiennej. Oczywiście może to być źródłem niezłego bałaganu. let na to nie pozwoli. a const już w ogóle.

Generalnie const oraz let sprawnie zastępują var. W sumie, w poprawnie politycznym kodzie, powinieneś być w stanie każdego vara wymienić na const albo let (w tej kolejności, nie inaczej). Czy to oznacza, że nie ma już żadnego uzasadnionego przypadku użycia var? Niekoniecznie. Jeśli z jakiejś przyczyny chcesz dobrać się do zmiennej globalnej z obiektu globalnego window, to możesz użyć var. Tylko zmiennej globalne zadeklarowane za pomocą var są dopisywane do obiektu window.

let letVariable = 'letVariable';  // global
var varVariable = 'varVariable'; // global
console.log(window.letVariable); // undefined
console.log(window.varVariable); // 'varVariable'
Tagi: const, let, var
Poprzedni artykuł
Następny artykuł

Może Cię zainteresować...

  • Operatory: Nullish Coalescing & Optional Chaining

    1 marca 2018
  • Żółwia ściąga do pobrania o funkcjach

    27 stycznia 2018
  • Pipeline Operator

    15 stycznia 2018

Najnowsze wpisy

  • O opcjonalnym łamaniu tekstu słów kilka
  • Internet oczami Józi wg S. Krug
  • Operatory: Nullish Coalescing & Optional Chaining
  • Oby tak się chciało, jak się nie chce
  • Gradient nie taki straszny, jak go malują

Tagi

5-minut-js a11y AngularJS asynchroniczność BDD BEM box-decoration-break compile css dyrektywy es6 freebies html5 js jsfiddle kompilacja konwencje link matka programistka mobile ngRoute niezmiennosc plunkr podstawy-js post-link pre-link Progressive Web Apps PWA react routing rss sass scss Service Worker setState slice splice tc39 proposal TDD testowanie title ui.router wlasnosci wordpress zmiana nazwy zakładki

Podoba Ci się tutaj?