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

  • Alfredo Garcia

    Alfredo Garc

    25 Mayıs 2007
  • apenney888

    apenney888

    27 EKİM 2010
  • Bigapplemagic

    Bigapplemagi

    22 EYLÜL 2011