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
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.
PHP 5.4 Çağrı-time pass-by-referans - ...
C iyi değeri by-pass ya da sabit refer...
Her zaman YAY bloğu içine kendini zayı...
JavaScript referans ile geçmek için mi...
Javascript Değişkenleri başvuruyla Pas...