şükela:  tümü | bugün
  • ing. vinçle kaldırmak, çekmek, çıkarmak.
  • javascript'te fonksiyon ve değişken tanımlarının, interpreter tarafından kodun yukarısına taşınmasına verilen ad.

    myfunc();
    var x = 1;

    yazıldığında bu

    var x
    myfunc();
    x = 1

    oluyor. çok fazla bi kullanımı yok aslında, daha ziyade artist programcılar tarafından ilginç bulmacaların yazılmasına yarıyor.

    1. ne döndürür?
    (function f(){
    function f(){ return 1; }
    return f();
    function f(){ return 2; }
    })();

    2. ne alert edilir?
    if (!("a" in window)) {
    var a = 1;
    }
    alert(a);

    3. ne döner?
    var foo = 1;
    function bar() {
    if (!foo) {
    var foo = 10;
    }
    alert(foo);
    }
    bar();
  • ben yazıyorum ankara ekrana düşüyor götüm karacı yazılımcıların ara sıra kullanması gereken hede hüdü.
  • madencilikte "dikey nakliyat" anlamına gelir
  • js interpreter, initialization ve declaration'a farkli muamele uygular, soyle ki, hoisting, sadece declaration'lar icin gecerlidir.

    js interpreter, bir scope (misal function) icinde herhangi bir yerde var ile tanimlanmis fakat init'lenmemis bir degisken gorurse, bunu once basa alir (en tepeye), sonra kodu isler. yani kodu duzenler bir bakima. bu durumda, degiskenler, scope icinde herhangi bir yerde tanimlandiklari surece (tanimlandiklar derken declare edildikleri) kullanilabilirler. buna hoisting(kaldirmak, yukari almak) denir.

    ayni durum initialization icin gecerli degildir, yani scope'un en asagisinda

    var x = 5;

    seklinde bir initialization yapip, yukarida bir yerde x'i kullanirsaniz, x'in undefined olarak tanimlandigini gorursunuz.

    best practice, her zaman degiskenleri scope basinda declare etmekten gecer.
  • javascript'te bu çok yanlış anlaşılıyor.

    tanımladığınız değişkenlerin ve fonksiyonların üste taşınması gibi bir şey söz konusu değil, yapılan şey interpreter'ın önce tanımladığınız şeyler için "hafızada yer açması".

    yani mesela:

    console.log(sozluk)

    var sozluk = "ekşi olan"

    gibi bir kodu çalıştırdığınızda konsola "undefined" düşer zira js engine orada bir sozluk değişkeni olduğunu gördü ama yukarı taşımadığı için tanımlandığı satıra gelene kadar bir değere sahip olmaz.

    tabi bu değişkenler için geçerli, fonksiyonlara kodun herhangi bir yerinden erişebilirsiniz.
  • şu iki durum karıştırılmamalıdır:

    1. durum:

    a = 2;
    var a;
    console.log( a ); // 2

    2. durum:

    console.log( a ); // undefined
    var a = 2;