SORU
1 ŞUBAT 2009, Pazar


JavaScript değişkenleri kapsamı nedir?

Javascript değişkenleri kapsamı nedir? Dışarıda bir işlevi yerine aynı kapsam içinde var mı? Ya da bunun bir önemi var mı? Ayrıca, nerede değişkenler global olarak tanımlanır saklı?

CEVAP
1 ŞUBAT 2009, Pazar


Yapabileceğim en iyi çalışması için örnek bir sürü vermek olduğunu düşünüyorum. Javascript programcılar neredeyse kapsamı ne kadar iyi anladıklarını tarafından sıralanmaktadır. Zaman zaman oldukça mantıksız olabilir.

  1. Genel kapsamlı bir değişken

    var a = 1;
    
    // global scope
    function one() {
      alert(a);
    }
    
  2. Yerel kapsamı

    var a = 1;
    
    function two(a) {
      alert(a);
    }
    
    // local scope again
    function three() {
      var a = 3;
      alert(a);
    }
    
  3. Ara:JavaScript bloğu kapsamı diye bir şey yoktur(ES5; ES6 let tanıtır)

    var a = 1;
    
    function four() {
      if (true) {
        var a = 4;
      }
    
      alert(a); // alerts '4', not the global value of '1'
    }
    
  4. Ara:Nesne özellikleri

    var a = 1;
    
    function five() {
      this.a = 5;
    }
    
  5. Gelişmiş:Kapatma

    var a = 1;
    
    var six = (function() {
      var a = 6;
    
      return function() {
        // JavaScript "closure" means I have access to 'a' in here,
        // because it is defined in the function in which I was defined.
        alert(a);
      };
    })();
    
  6. Gelişmiş:Prototip tabanlı kapsam çözümlemesi

    var a = 1;
    
    function seven() {
      this.a = 7;
    }
    
    // [object].prototype.property loses to
    // [object].property in the lookup chain. For example...
    
    // Won't get reached, because 'a' is set in the constructor above.
    seven.prototype.a = -1;
    
    // Will get reached, even though 'b' is NOT set in the constructor.
    seven.prototype.b = 8;
    
  7. Tamamen

    // These will print 1-8
    one();
    two(2);
    three();
    four();
    alert(new five().a);
    six();
    alert(new seven().a);
    alert(new seven().b);
    

  8. Küresel Yerel:Ekstra karmaşık bir Durum

    var x = 5;
    
    (function () {
        console.log(x);
        var x = 10;
        console.log(x); 
    })();
    

    Bu baskı undefined 10 yerine 5 10 JavaScript beri hep hamle değişken bildirimleri (başlatmaları) üst kapsamı, yapım kodu eşdeğeri:

    var x = 5;
    
    (function () {
        var x;
        console.log(x);
        x = 10;
        console.log(x); 
    })();
    
  9. Fıkra kapsamı değişken yakalamak

    var e = 5;
    console.log(e);
    try {
        throw 6;
    } catch (e) {
        console.log(e);
    }
    console.log(e);
    

    Bu, *, 5*26 25**dışarı yazdırır. Catch tümcesi içinde e global ve yerel değişkenler gölgeler. Ama bu özel kapsam yalnızca yakalandı değişkeni için. Eğer catch tümcesi içinde var f; yazarsanız, o zaman tam olarak eğer daha önce tanımlanmış olsaydı ya da try-catch bloğundan sonra aynı şey.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • njhaley

    njhaley

    24 NİSAN 2006
  • Professor Messer

    Professor Me

    27 NİSAN 2007