SORU
4 ŞUBAT 2009, ÇARŞAMBA


Nasıl değişken atama JavaScript çalışır?

Geçen gün tam olarak nasıl kütle JavaScript çalıştığını görmek için oynuyordum.

İlk konsolda: bu örnek denedim

a = b = {};
a.foo = 'bar';
alert(b.foo);

Sonuç "uyarısı. bir görüntülenen" bar oldu Bu yeterince adil, a b gerçekten aynı nesne için isimler. Sonra, nasıl bu örnek daha basit hale getirebilirim diye düşündüm.

a = b = 'foo';
a = 'bar';
alert(b);

Hemen hemen aynı şey, değil mi? Peki bu sefer, ilk örnek davranış beklerdim olarak foo bar döndürür.

Peki neden böyle oluyor?

N. B.Bu örnek daha aşağıdaki kod ile basitleştirilmiş olabilir:

a = {};
b = a;
a.foo = 'bar';
alert(b.foo);

a = 'foo';
b = a;
a = 'bar';
alert(b);

(JavaScript dizeler gibi ilkel davranır ve farklı sağlamalarının için tamsayılar şüpheleniyorum. Sağlamalarının dönüş işaretçisi bir süre "core" ilkel kendilerini bir kopyasını döndürür)

CEVAP
4 ŞUBAT 2009, ÇARŞAMBA


İlk örnekte, varolan bir nesnenin özelliğini ayarlarsınız. İkinci örnekte, yeni bir nesne atama.

a = b = {};

a b şimdi aynı nesne işaretçileri. Yaparken bu kadar:

a.foo = 'bar';

b.foo beri a b aynı nesneye işaret ayarlar.

Ancak!

Eğer bunun yerine eğer:

a = 'bar';

a farklı bir nesne için artık puan diyorsunuz. Bu ne a daha önce sivri bir etkisi yoktur.

Javascript değişken atama ve özellik atama 2 farklı işlemler vardır. En iyi nesnelere işaretçi değişkenler düşünmek, ve doğrudan bir değişkene atadığınızda, herhangi bir nesne, sadece farklı bir nesne için değişken repointing değiştiriyorsunuz.

Ama bir özelliği, a.foo gibi atama a işaret eden bir nesneyi değiştirmek olacaktır. Bu, tabii ki, aynı zamanda sadece hepsi aynı nesneye işaret, çünkü bu nesneyi işaret eden tüm diğer başvurular değiştirir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AmeriiK_HD

    AmeriiK_HD

    16 AĞUSTOS 2012
  • Capcom Unity

    Capcom Unity

    5 NİSAN 2010
  • OnlyFunClips

    OnlyFunClips

    16 ŞUBAT 2012