Javascript'te bir operasyon sırası yani işlev sırası vardır ve buna dikkat edilerek kodlama yapmak gerekir. Yazılan bir JavaScript kodu iki aşamadan geçer birisi derleme diğeri ise yürütmedir. 

  • Beyannameler ( var, let, constve function) okunur ilk kod derleme sırasında.
  • Atamalar ( thing = value) ve işlev çağrıları ( someFunction()) yürütme sırasında ikinci olarak okunur .

Bu sıralamaları doğru olarka kullandığımızda daha sağlıklı bir kodlama elde ederiz. 

Ana arasındaki fark varlet ve const beyanlar da kullanılırken var ve let değişken olmadan veya herhangi bir değere işaret etmeden başlatılabilir . const Bir değer olmadan başlatılmaya çalışmak bir referans hatası verecektir.

Kodunuzdaki herhangi bir yeri var ve let değişkenleri bildirebilir ve daha sonra başka bir yere atayabilirsiniz.

Derleme aşamasında, değişken bildirimleri edilir çekilir aşağıdaki kodu, üstüne functionbeyanlarına, her şeyin üstünde.

  console.log(thisVar)
    var thisVar = "Hoisted" 

    // compiles to: 
    var thisVar
    console.log(thisVar)
    thisVar = "Hoisted"

Bu kod parçasını çalıştırmayı deneseydiniz, sonuç bu olurdu:

   console.log(thisVar)
    var thisVar = "Hoisted"

    //OUTPUT: 
    > undefined

var thisVar Beyan okunduğunda, ancak atama işlevi çağrısının ardından gelen (ya da console.log() bu durumda) sonucu neden olur, undefined program değişken var olduğunu bildiği için, ama zamanında console.log() henüz değer verdiklerini bilmediği için noktalar.

Kaldırma işleminin bir diğer önemli kısmı,  kodunuzda bildirilmeden önce function'u arama yeteneğidir .

Daha önce de belirtildiği gibi, hem vardeğişkenler hem de functionbildirimler derleme sırasında önce okunur. İşlev çağrıları yalnızca yürütme aşamasında okunur / çalıştırılır. Bu kod işleme sırası nedeniyle, böyle şeyler yapabiliriz:

 belowCall()

    function belowCall(){
        console.log("I was called before I was declared!")
    }

    //OUTPUT:
    > undefined
    > I was called before I was declared!

Bu neden işe yarıyor? Çünkü derleme aşamasında, functionçağrılar aslında görünmezdir. Her yerde derleme faz atlama functionaramaları, hangi kodun çalıştırılacağını için okur zaman onlar denir ve sonra aramalar okumak ve yürütme aşamasında çalıştırılır.

Ancak, bunu işlevinize işaret eden bir değişkenle (işlev ifadesi) deneyecekseniz, sorun yaşarsınız:

 varFunction();

    var varFunction = function(){
        console.log("I was called before I was assigned!")
    }

    //OUTPUT:
    > TypeError: varFunction is not a function

İşte böyle yaparsak; 

  // How the compiler reads the code above: 

    var varFunction; 

    varFunction(); 

    varFunction = function(){
        console.log("I was called before I was assigned!")
    }

Hatırlatma : Değişken atama, yürütme aşamasında ancak işlev çağrılarından sonra okunur.