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

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

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


جمع‌بندی


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


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

مقالات مرتبط

نحوهٔ میزبانی مستقل اپلیکیشن Next.js – پیکربندی، کشینگ، و استراتژی‌های استقرار

nextjs-self-hosting-deployment-cache-isr-proxy-env

ادامه

مقایسه‌های شرطی تبدیل‌پذیر و کلاس‌های پروتوتایپی در جاوااسکریپت – درک دقیق رفتار شرطی و ساختارهای ارث‌بری

این مقاله دو موضوع مهم از ضمیمهٔ A کتاب YDKJSY را بررسی می‌کند: نحوهٔ تبدیل نوع در عبارات شرطی مانند if و while، و الگوی کلاس‌های پروتوتایپی به‌عنوان پیش‌زمینه‌ای برای کلاس‌های ES6. با مثال‌های عملی، تفاوت بین مقایسه‌های دقیق و تبدیل‌پذیر، و نحوهٔ تفویض رفتار از طریق زنجیرهٔ پروتوتایپ روشن می‌شود.

ادامه

پروتوتایپ‌ها در جاوااسکریپت – زنجیرهٔ ارجاع، تفویض ویژگی‌ها، و نقش this در رفتار پویا

پروتوتایپ‌ها در جاوااسکریپت مکانیزمی برای ارجاع ویژگی‌ها بین اشیاء هستند. این مقاله به تعریف زنجیرهٔ پروتوتایپ، نحوهٔ تفویض ویژگی‌ها، تفاوت بین دسترسی و انتساب، و نقش کلیدی this در فراخوانی متدهای ارجاع‌شده می‌پردازد. درک این مفاهیم برای طراحی شی‌گرا و رفتارهای پویا در JS ضروری است.

ادامه

Closure و this در جاوااسکریپت – حافظهٔ دامنه و زمینهٔ اجرایی در توابع

Closure و this دو مفهوم بنیادی و گاه گیج‌کننده در جاوااسکریپت هستند. این مقاله به تعریف دقیق closure به‌عنوان حافظهٔ متغیرهای بیرونی در توابع، و بررسی رفتار پویا و وابسته به نحوهٔ فراخوانی در this می‌پردازد. با مثال‌های عملی، تفاوت بین دامنهٔ ثابت و زمینهٔ اجرایی پویا روشن می‌شود.

ادامه

تکرار در جاوااسکریپت – الگوی Iterator، ساختارهای قابل‌تکرار، و مصرف استاندارد داده‌ها

تکرار در جاوااسکریپت – الگوی Iterator، ساختارهای قابل‌تکرار، و مصرف استاندارد داده‌ها

ادامه

ماژول‌ها در جاوااسکریپت – از الگوی کلاسیک تا ES Modules و تفاوت‌های ساختاری

ماژول‌ها در جاوااسکریپت مانند کلاس‌ها برای گروه‌بندی داده و رفتار در واحدهای منطقی طراحی شده‌اند. این مقاله به بررسی الگوی کلاسیک ماژول‌ها با توابع کارخانه‌ای، تفاوت آن با کلاس‌ها، و معرفی ES Modules در ES6 می‌پردازد. همچنین به نحوهٔ استفاده، صادرات، و وارد کردن ماژول‌ها و تفاوت در نمونه‌سازی اشاره می‌شو

ادامه