آموزش تابع ها در جاوا اسکریپت
یک راه برای تعریف تابع در جاوا اسکریپت، استفاده از دستور function است. به مثال زیر توجه کنید:
function add(param1, param2) {
return param1 + param2;
}
در کدهای بالا، یک تابع به نام add ایجاد کرده ایم، که دو پارامتر به نام های param1 و param2 دارد و در خروجی جمع این پارامترها را با استفاده ازدستور return برمی گرداند. برای فراخوانی این تابع، می توانیم به صورت زیر عمل کنیم:
> add(6, 1)
7
> add('a', 'b')
'ab'
یک راه دیگر برای تعریف تابع add() این است که با استفاده از دستور function یک تابع تعریف کنیم و آن را به یک متغیر انتساب دهیم(در این جا متغیر ما add است):
var add = function (param1, param2) {
return param1 + param2;
};
تابع ها با استفاده از دستور return مقادیری را برمی گردانند، بنابراین ما می توانیم تابع ها بعنوان آرگومان به دیگر تابع ها پاس(pass) دهیم:
someOtherFunction(function (p1, p2) { ... });
تابع ها در ابتدا قرار می گیرند
وقتی که کدهای جاوا اسکریپت اجرا می شوند، تابع ها در ابتدای میدان دید فعلی قرار می گیرند(hoisted). این کار به ما امکان می دهد که بتوانیم توابعی که در خط های بعدی تعریف شده اند، رجوع کنیم و آنها را در کدهای بالایی فراخوانی کنیم.
function foo() {
bar(); // در بالای این میدان دید قرار می گیرد bar این کار صحیح است زیرا تابع
function bar() {
...
}
}
همچنین خوب است بدانید که دستوراتی که با کلمه ی کلیدی var آغاز می شوند نیز در ابتدای میدان دید قرار می گیرند(hoisted). برای مشاهده ی این موضوع می توانید به مقاله ی "متغیرها در ابتدا قرار می گیرند" در ص 23 مراجعه کنید. اما آنچه به آنها انتساب داده شده است(assignments) در جای خود باقی می ماند و در ابتدا قرار نمی گیرد. به مثال زیر توجه کنید:
function foo() {
bar(); // تعریف نشده است bar این فراخوانی تابع اجرا نمی شود زیرا
var bar = function () {
// ...
};
}
استفاده از متغیر ویژه ی arguments در جاوا اسکریپت
تمام آرگومان های داده شده به یک تابع در جاوا اسکریپت، در داخل یک متغیر خاص به نام arguments قرار می گیرند. متغیر arguments مانند یک آرایه() است اما هیچ یک از متدهای آرایه را ندارد؛ به مثال زیر توجه کنید:
> function f() { return arguments }
> var args = f('a', 'b', 'c');
> args.length
3
> args[0] // read element at index 0
'a'
آرگومان های اضافی در جاوا اسکریپت
در مثال زیر یک تابع به نام f تعریف کرده ایم، که دو پارامتر x و y دارد(تابع toArray() در مقاله ی "تبدیل آرگومان ها به آرایه" در صفحه 21 توضیح داده شده است):
function f(x, y) {
console.log(x, y);
return toArray(arguments);
}
در مثال زیر، با فراخوانی تابع بالا، سه آرگومان به آن داده ایم، که پارامترهای اضافی نادیده گرفته می شوند(به جز در متغیر arguments):
> f('a', 'b', 'c')
a b
[ 'a', 'b', 'c' ]
پارامترهای نادیده گرفته شده، مقدار undefined(تعریف نشده) دارند:
> f('a')
a undefined
[ 'a' ]
> f()
undefined undefined
[]
پارامترهای اختیاری در جاوا اسکریپت
یک راه متداول برای انتساب دادن مقادیر پیش فرض(default values) به پارامترهای یک تابع، به صورت زیر است:
function pair(x, y) {
x = x || 0;
y = y || 0;
return [ x, y ];
}
در خط شماره 2 از کدهای بالا، اگر x ارزش true داشته باشد (و null یا undefined یا غیره نباشد)، عملگر || مقدار x را برمی گرداند، و در غیر این صورت عملوند دوم(یعنی 0 ) را برمی گرداند:
> pair()
[ 0, 0 ]
> pair(3)
[ 3, 0 ]
> pair(3, 5)
[ 3, 5 ]
به دست آوردن تعداد پارامترها در جاوا اسکریپت
اگر می خواهید تعداد پارامترهای یک تابع را به دست آورید، می توانید از دستور arguments.length استفاده کنید؛ به مثال زیر توجه کنید:
function pair(x, y) {
if (arguments.length !== 2) {
throw new Error('Need exactly 2 arguments');
}
...
}
تبدیل متغیر arguments به یک آرایه
متغیر arguments یک آرایه نیست؛ بلکه یک شبه آرایه است(مقاله ی اشیاء شبه آرایه و متدهای متدهای ژنریک را در صفحه 262 مشاهده کنید). متغیر arguments یک پروپرتی به نام length دارد و ما می توانیم با استفاده از اندیس ها در براکت ها، به عناصر آن دسترسی داشته باشیم. اما نمی توانیم عناصر آن را حذف کنیم یا از هیچ متد آرایه ای بر روی آن استفاده کنیم. اما گاهی اوقات نیاز داریم متغیر arguments را به یک آرایه تبدیل کنیم؛ تابع زیر این کار را برای ما انجام می دهد(این تابع در مقاله ی اشیاء شبه آرایه و متدهای ژنریک در صفحه ی 262 شرح داده شده است):
function toArray(arrayLikeObject) {
return Array.prototype.slice.call(arrayLikeObject);
}
{module کمک نقدی به نویسنده}
- بازدید: 476
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.