[ Web Proxy ]
URL:
Viewing: https://tr.javascript.info/var [Back]  [Original]

Eski tip "var"
TR

Bu ak-kaynakl projenin tm dnyada kullanlabilir olmasn istiyoruz.

Kendi dilinizde eviriye yardm edebilirsiniz!

    Javascript.info'da ara:
    Eitimde ara:
    Light themeDark theme
    DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek

    lk blmde degiskenler altnda eit deiken tanmlama yntemi olduundan bahsedilmiti.

    1. let
    2. const
    3. var

    let ve const Szcksel Ortam anlamnda birbiri ile tam olarak ayndr.

    Fakat var bunlardan ok farkldr. Bunun dilin ilk olumaya balad zamanlara dayanr. Genelde modern stilde pek kullanlmazlar fakat yine de arada srada grebilirsiniz.

    Eer byle bir yazmla karlamayacanza eminseniz bu blm geebiir veya sonra tekrar gelebilirsiniz.

    lk grte var let ile benzer ekilde alyormu gibi grnr. kisi de deiken tanmlamaya yarar:

    function selamVer() {
      var terim = "Merhaba"; // yerel deiken "let" yerine "var" kullanlmtr.
      alert(terim); // Merhaba
    }
    
    selamVer();
    
    alert(terim); // Hata! terim tanml deil.

    Fakat farkllk tam da burada ortaya kar.

    var'n blok kapsam yoktur

    var ya fonksiyon iinde yada globalde tanmlanr, dier trl tm bloklar ierisinden eriilebilir.

    rnein:

    if (true) {
      var test = true; // "let" yerine "var" kullanld
    }
    
    alert(test); // true, deiken if'ten sonra da varlna devam etti.

    Eer 2. satrda let test kullanlsayd alert ierisinde grnr olmazdr. Fakat var kod blounu grmezden gelir. Bundan dolay global bir test deikeni olmu olur.

    Ayn ekilde dngler iin de var dngnn dnda da eriilebilirdir:

    for(var i = 0; i < 10; i++) {
      // ...
    }
    
    alert(i); // 10,"i" dngden sonra grlebilirdir, evrensel deiken olarak alr.

    Eer fonksiyonun iinde bir if blou varsa bu durumda var fonksiyon seviyesinde bir deiken olur:

    function selamVer() {
      if (true) {
        var terim = "Merhaba";
      }
    
      alert(terim); // alyor
    }
    
    selamVer();
    alert(terim); // Hata: terim tanml deildir.

    Eer if, fora ramen alan var deikenleri grrseniz bunun nedeni nceden JavaScriptte bloklarn Szcksel Ortama dahil olmamasndandr.

    var fonksiyon almaya baladnda ilenir.

    var tanmlar fonksiyon ( veya script ) altnda tanmlanr.

    Dier bir deyile var deikenleri fonksiyon balangcnda tanmlanr, tanmn nerede olduu nemli deil. ( i ie fonksiyonlar hari tabi )

    Aadaki koda bakarsanz:

    function selamVer() {
      terim = "Merhaba";
    
      alert(terim);
    
      var terim;
    }

    Teknik olarak aadaki gibidir.

    function selamVer() {
      var terim;
    
      terim = "Merhaba";
    
      alert(terim);
    }

    Hatta u ekilde de olabilir:

    function selamVer() {
      terim = "Merhaba"; // (*)
    
      if (false) {
        var terim;
      }
    
      alert(terim);
    }

    Bu davrana ykseltilme davran da denir, nk tm var ile tanmlamalar fonksiyonun bana ykseltilme

    Bundan dolay yukardaki rnekte if(false) hibir zaman almayacaktr, zaten nemli de deildir. inde bulunan var fonksiyonun banda ilenir. Yani (*) annda zaten terim deikeni vardr.

    Tanmlar ykseltilir fakat atamalar ykseltilmez

    Bir rnekle gstermek gerekirse:

    function selamVer() {
      alert(terim);
    
      var terim = "Merhaba";
    }
    
    selamVer();

    var terim = "Merhaba" iki tane aksiyon barndrr:

    1. Deiken tanmlama var
    2. Deiken atama =.

    Tanmlama ykseltilme ilemi ile fonksiyon balangcnda yaplr. Fakat atama kod neredeyse orada yaplr. Bundan dolay kod aslnda tam olarak aadaki gibi alr:

    function selamVer() {
      var terim; // tanmalma balangta alr.
    
      alert(terim); // tanmsz
    
      terim = "Merhaba"; // ...atama burada yaplr.
    }
    
    selamVer();

    Tm var tanmlar fonksiyon baladnda ilendiinden dolay, istenildii yerlere bu deikenlere eriim bulunmaktadr. Fakat deikenler atama yaplana kadar tanmszdr ( undefined ).

    Yukardaki her iki alert rnei de hatasz almaktadr nk terim mevcuttur. Deeri atanmadndan undefined gstermitir.

    zet

    varn iki tane ana farkll mevcuttur:

    1. Deikenlerin blok limiti yoktur. En dk fonksiyon ierisinden grnebilirler. Yani ayn fonksiyon ierisinde farkl bir bloun iinde yazlsa bile fonksiyon iinden eriilebilmektedir.
    2. Deikenlerin tanmlanmas fonksiyon baladnda gerekleir.

    Evrensel obje sz konusu olduunda bir farkllk bulunmaktadr bunu bir sonraki blmde greceiz.

    Bu farkllklar aslnda ktdr. ncelikle blok seviyesinde deiken yaratlmamaktadr. Ykseltme olay hataya neden olabilmektedir. Bundan dolay yeni kodlarda var ok nadir olarak kullanlr.

    Eitim haritas

    Yorumlar

    yorum yapmadan nce ltfen okuyun...
    • Eer gelitirme ile alakal bir neriniz var ise yorum yerine github konusu gnderiniz.
    • Eer makalede bir yeri anlamadysanz ltfen belirtiniz.
    • Koda birka satr eklemek iin <code> kullannz, birka satr eklemek iin ise <pre> kullann. Eer 10 satrdan fazla kod ekleyecekseniz plnkr kullanabilirsiniz)

    Web Proxy Viewer  |  New URL  |  Original Page