1. تمرير بالقيمة (حسب القيمة)
يتم نسخ قيمة المتغير ولن يكون لها أي علاقة بالقيمة الأصلية، أي أنه حتى إذا تم تعديل القيمة الجديدة، فلن تتغير القيمة الأصلية في JavaScript.
انسخ رمز الكود كما يلي:
وظيفة اختبار PassValue ()
{
فار م=1;
فار ن=2;
// انسخ قيمتي m و n وقم بتمريرهما إلى passValue
passValue(m,n);
تنبيه (م)؛ // ستكون القيمة الأصلية
}
قيمة تمرير الدالة (أ، ب)
{
a = a+b; // تغيير قيمة a، هنا a مجرد نسخة من القيمة الأصلية
تنبيه (أ)؛
}
نتيجة الإخراج:
3
1
2. بالرجوع.
يتم تمرير نسخة من المرجع نفسه إلى الوظيفة، ولا يتم نسخ الكائن المشار إليه بواسطة المرجع (وينطبق الشيء نفسه على Java، إذا تغيرت قيمة سمة الكائن، منذ الأصل). يشير المرجع إلى نفس الكائن، لذلك سيتم الوصول إلى القيمة المعدلة من خلال المرجع الأصلي؛
ولكن إذا قمت فقط بتوجيه المرجع إلى كائن جديد في الوظيفة، فلن تتغير قيمة الكائن الأصلي، بل سيتم تغيير المرجع المنسوخ فقط.
انسخ رمز الكود كما يلي:
وظيفة اختبار PassValue ()
{
تاريخ فار = تاريخ جديد (2006,02,27);
تنبيه (date.getDate())؛ // الإخراج هو 27
// انسخ مرجع التاريخ نفسه وقم بتمريره إلى passReference. لاحظ أنه لم يتم نسخ الكائن المشار إليه حسب التاريخ.
passReference(date);
تنبيه (date.getDate())؛ // الإخراج هو 12
// نفس ما ورد أعلاه
ChangeReference(date);
تنبيه (date.getDate())؛ // الإخراج لا يزال 12
}
مرجع تمرير الدالة (دا)
{
// نظرًا لأن da والمرجع الأصلي يشيران إلى نفس الكائن، خارج الوظيفة، فإن ما يتم الوصول إليه من خلال المرجع الأصلي سيكون قيمة سمة التاريخ للكائن، والتي ستكون القيمة المعدلة.
da.setDate(12);
}
مرجع تغيير الوظيفة (دا)
{
// في هذا الوقت، المرجع da هو في الواقع نسخة من المرجع الأصلي. لن تؤثر إعادة تعيين المرجع نفسه على المرجع الأصلي.
دا= تاريخ جديد(2007,05,11);
// قم بتوجيه مرجع da إلى كائن جديد في هذا الوقت، لا يزال المرجع الأصلي يشير إلى الكائن الأصلي.
تنبيه (da.getDate ())؛ // الإخراج هو 11
}
3 سلسلة خاصة
في JavaScript، يتم تمرير السلسلة أيضًا حسب المرجع، ولا يوجد سوى طريقة charAt في js، ولكن لا توجد طريقة تعديل مقابلة، وهي نفس طريقة السلسلة في Java ولها ثبات.
انسخ رمز الكود كما يلي:
var s1 = "مرحبا";
var s2 = "الجحيم" + "o";
إذا (s1 == s2)
تنبيه ("s1 = s2")؛ // هل سيتم تنفيذ هذه الجملة؟ قد يعتقد الأشخاص الذين هم على دراية بجافا أنه لن يتم تنفيذها (أنا أنتقد هذه الجملة بشدة، فهي يتم تنفيذها أيضًا في جافا!) في Java == يقارن الهوية.