در جاوااسکریپت – تفاوت مقدار و مرجع، و فرم‌های متنوع تعریف تابع

در جاوااسکریپت – تفاوت مقدار و مرجع، و فرم‌های متنوع تعریف تابع

مقدار-در-برابر-مرجعتابع-بی‌نامarrow-functionنام‌گذاری-تابع

~2 دقیقه مطالعه • بروزرسانی ۲۸ مهر ۱۴۰۴

مقدار در برابر مرجع


در جاوااسکریپت، نوع داده تعیین می‌کند که آیا مقدار به‌صورت کپی منتقل می‌شود یا به‌صورت ارجاع. داده‌های اولیه (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"

تابع دارای شناسهٔ داخلی است که می‌توان از آن برای ارجاع داخلی یا دیباگ استفاده کرد.


چرا نام‌گذاری تابع مهم است؟


اگر تابعی در برنامه وجود دارد، پس هدفی دارد — و باید نامی داشته باشد که آن هدف را بیان کند. نام‌گذاری باعث خوانایی بهتر، دیباگ آسان‌تر، و نگهداری مؤثرتر کد می‌شود.


فرم‌های دیگر تعریف تابع


جاوااسکریپت فرم‌های متنوعی برای تعریف تابع دارد:


  • Generator: function* two() {}
  • Async: async function three() {}
  • Arrow: x => x * 2
  • IIFE: (function(){})()
  • Method در کلاس: class A { method() {} }
  • Method در شیء: { method() {}, old: function() {} }

هر فرم کاربرد خاص خود را دارد. مثلاً arrow function برای حفظ this به‌صورت لکسیکال مناسب است، اما نباید برای همهٔ توابع استفاده شود.


جمع‌بندی


درک تفاوت بین مقدار و مرجع، و شناخت فرم‌های مختلف تعریف تابع، از مهارت‌های ضروری برای برنامه‌نویسی حرفه‌ای در جاوااسکریپت است. نام‌گذاری مناسب توابع و انتخاب فرم درست برای هر موقعیت، باعث خوانایی و پایداری بیشتر کد می‌شود.


نوشته و پژوهش شده توسط دکتر شاهین صیامی