در جاوااسکریپت، نوع داده تعیین میکند که آیا مقدار بهصورت کپی منتقل میشود یا بهصورت ارجاع. دادههای اولیه (primitives) مانند رشته، عدد، بولی، بهصورت کپی منتقل میشوند:
var myName = "Kyle";
var yourName = myName;
myName = "Frank";
console.log(myName); // Frank
console.log(yourName); // Kyleدر مقابل، اشیاء مانند آرایهها و توابع بهصورت ارجاع منتقل میشوند:
var myAddress = { street: "123 JS Blvd" };
var yourAddress = myAddress;
myAddress.street = "456 TS Ave";
console.log(yourAddress.street); // 456 TS Aveهر دو متغیر به یک شیء مشترک اشاره دارند، بنابراین تغییر در یکی، در دیگری نیز دیده میشود.
جاوااسکریپت فرمهای متنوعی برای تعریف توابع دارد. یکی از رایجترین آنها تابع بینام است:
var awesomeFunction = function(coolThings) {
return amazingStuff;
};در ES6، JS میتواند نام تابع را استنتاج کند، اما این نام فقط متادیتا است و قابل استفاده در کد نیست.
var awesomeFunction = function someName(coolThings) {
return amazingStuff;
};
awesomeFunction.name; // "someName"تابع دارای شناسهٔ داخلی است که میتوان از آن برای ارجاع داخلی یا دیباگ استفاده کرد.
اگر تابعی در برنامه وجود دارد، پس هدفی دارد — و باید نامی داشته باشد که آن هدف را بیان کند. نامگذاری باعث خوانایی بهتر، دیباگ آسانتر، و نگهداری مؤثرتر کد میشود.
جاوااسکریپت فرمهای متنوعی برای تعریف تابع دارد:
function* two() {}async function three() {}x => x * 2(function(){})()class A { method() {} }{ method() {}, old: function() {} }هر فرم کاربرد خاص خود را دارد. مثلاً arrow function برای حفظ this بهصورت لکسیکال مناسب است، اما نباید برای همهٔ توابع استفاده شود.
درک تفاوت بین مقدار و مرجع، و شناخت فرمهای مختلف تعریف تابع، از مهارتهای ضروری برای برنامهنویسی حرفهای در جاوااسکریپت است. نامگذاری مناسب توابع و انتخاب فرم درست برای هر موقعیت، باعث خوانایی و پایداری بیشتر کد میشود.