SORU
5 ŞUBAT 2009, PERŞEMBE


JavaScript bir referans ile ya da pass-by-value dil mi?

İlkel tipleri (Sayı, String, vb.) geçti değer, ama Nesneleri bilinmeyen, çünkü bunlar hem geçmiş-değer (diye düşünüyoruz tutan bir değişken bir nesnedir aslında bir referans nesnesi) ve geçmiş referans (zaman dikkate aldığımızı değişkeni için nesne tutan nesnenin kendisi).

Sonuçta bir önemi yok, ancak, bağımsız sözleşmeler geçen sunmak için doğru yolu ne olduğunu bilmek istiyorum. Semantik bununla ilgili ne olması gerektiğini tanımlayan JavaScript belirtimi, bir alıntı var mı?

CEVAP
3 EYLÜL 2010, Cuma


Javascript ile ilginç. Örnek:

function changeStuff(a, b, c)
{
  a = a * 10;
  b.item = "changed";
  c = {item: "changed"};
}

var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};

changeStuff(num, obj1, obj2);

console.log(num);
console.log(obj1.item);    
console.log(obj2.item);
<!-- results pane console output; see http://meta.stackexchange.com/a/242491 -->
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

Bu çıktıyı üretir:

10
changed
unchanged

Eğer değer saf geçmek olsaydı, o zaman obj1.item değiştirme fonksiyonu obj1 dışarıdan herhangi bir etkisi olurdu. Eğer referans ile saf geçmek olsaydı, o zaman her şey değişirdi. num 100, ve obj2.item "changed" okur.

Bunun yerine, Durum öğesini geçirilen değer geçirilir. Ama değeri tarafından geçirilen bir öğedirkendisibir referans. Teknik olarak, bu call-by-sharing denir.

Pratik açıdan, bu parametre kendisi (num obj2 gibi) değiştirirseniz, bu parametre beslenir öğeyi etkilemez anlamına gelir. Ama eğer parametre İÇ değiştirirseniz, geri sar (obj1 ile) yaymak.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 3DS Max Tutorials

    3DS Max Tuto

    4 AĞUSTOS 2013
  • GALERNAYA20

    GALERNAYA20

    19 NİSAN 2011
  • SelmerSaxMan

    SelmerSaxMan

    24 HAZİRAN 2006