javascriptParameters and argumentsپارامتر و آرگومان در جاوااسکریپت
تفاوت پارامتر و آرگومان در جاوااسکریپت را با محاسبهٔ خرید یاد بگیرید؛ ترتیب ورودیها، مقدار پیشفرض و رفتار undefined را بررسی کنید.
مفهوم به زبان ساده
پارامتر نامی است که هنگام تعریف #function برای ورودی مینویسیم؛ آرگومان مقدار یا عبارتی است که هنگام فراخوانی میفرستیم. در تابع lineTotal، نامهای price و quantity پارامترند. در lineTotal(80000, 2)، دو عدد ۸۰۰۰۰ و ۲ آرگومانهای همان فراخوانی هستند. این تفاوت کمک میکند دربارهٔ قرارداد تابع دقیق حرف بزنیم.
آرگومانها بر اساس جایگاه به پارامترها میرسند، نه بر اساس نام متغیرهای بیرون تابع. بنابراین جابهجاکردن ورودیها ممکن است نتیجه را خراب کند، حتی اگر کد از نظر نحوی درست باشد. نام روشن تابع و پارامترها مهم است. اگر تعداد گزینههای مشابه زیاد شد، دریافت یک شیء با ویژگیهای نامدار میتواند انتخاب مناسبتری باشد؛ در این مدخل قرارداد سادهٔ دو ورودی را تمرین میکنیم.
پارامتر بدون آرگومان، بهطور معمول undefined میگیرد. مقدار پیشفرض مثل quantity = 1 در نبود آرگومان یا دریافت صریح undefined اعمال میشود، ولی برای null یا صفر اعمال نمیشود. نمونه نشان میدهد تعداد صفر حفظ میشود. پیشفرض به معنی اعتبارسنجی نیست: منفی، متن یا عدد نامعتبر هنوز باید در مرز مناسب بررسی شود. همچنین ارسال یک شیء به تابع کپی مستقل نمیسازد؛ تابع میتواند ویژگیهای همان شیء را تغییر دهد. ورودی و خروجی مورد انتظار را قبل از گسترش تابع مشخص کنید.
کجا به کار میآید؟
- استفادهٔ مجدد از محاسبهٔ مبلغ برای قیمت و تعدادهای مختلف
- تعریف گزینهٔ اختیاری با پیشفرضی که صفر معتبر را حفظ کند
از تعریف تا یک مثال واقعی
function lineTotal(price, quantity = 1) {
return price * quantity;
}
console.log(lineTotal(80000, 2));
console.log(lineTotal(80000));
console.log(lineTotal(80000, undefined));
console.log(lineTotal(80000, 0));
160000 80000 80000 0
این مثال چطور کار میکند؟
در تعریف، price و quantity پارامترند؛ در فراخوانی نخست ۸۰۰۰۰ و ۲ آرگوماناند.
ضرب دو ورودی نخست ۱۶۰۰۰۰ را برمیگرداند.
نبود آرگومان دوم و ارسال undefined هر دو مقدار پیشفرض ۱ را فعال میکنند.
صفر، undefined نیست؛ مقدار پیشفرض جای آن را نمیگیرد و خروجی صفر میشود.
اشتباه رایج
پیشفرض quantity = 1 فقط نبود آرگومان یا undefined را پوشش میدهد؛ null، مقدار منفی یا متن را معتبر نمیکند. نام متغیر فرستنده هم ترتیب پارامترهای تابع را تغییر نمیدهد.
این را به خاطر بسپارید
پارامتر در تعریف و آرگومان در فراخوانی است؛ ترتیب، نوع و پیشفرض ورودیها بخشی از قرارداد تابعاند.