یک تابع یک بلاک از مجموعه ای کد است که درون {} برای انجام وظیفه ای خاص قرار گرفته است.
توابع هم میتوانند خودکار اجرا شوند هم میتوانند صدا زده شده سپس اجرا شوند.
تابع دارای نام است بهتر است نام تابع توصیفی از کاری که انجام میدهد باشد.
یک تابع در زبان های دیگر برنامه نویسی بسیار مشابه یک روش یا یک زیرساخت است.
مثال:
1 2 3 |
function myFunction(p1, p2) { return p1 * p2; } |
نحوه تعریف تابع
برای تعریف تابع ابتدا واژه function را نوشته سپس یک نام برای آن تعیین میکنیم. بهتر است نام جز کلمات کلیدی رزرو شده نباشد.بعد از نام یک پرانتز () قرار میدهیم.
نام گذاری نام تابع از قوانین تعریف متغیر پیروی میکند. نام میتواند دارای حرف،عدد، علامت $ و _ باشد.
هدف از قرار دادن پرانتز قرار دادن پارامتر در هنگام فراخوانی تابع است. این پارامترها نماینده مقادیری هستند که قرار است از بیرون تابع به داخل تابع تزریق شوند.
هر پارامتر با کاما , از دیگری جدا می شود. موقعیت پارامترها بصورت محلی است و تنها از طریق خود تابع در دسترس میباشد.
مثال:
1 2 3 |
function name(parameter1, parameter2, parameter3) { // code to be executed } |
فراخوانی تابع
کدهای درون بلاک تابع زمانی فراخوانی میشود که توسط کسی فراخوانی شود.
- زمان های ممکن برای فراخوانی یک تابع
- زمانی که یک رویداد مانند کلیک کردن در سند اتفاق میفتد.
- زمانی که تابع توسط کد دیگری در جاوااسکریپت فراخوانی میشود.
- زمانی که بصورت اتوماتیک و توسط خودش فراخوانی میشود.
مقدار بازگشتی یا return در توابع جاوااسکریپت
یک تابع پس از فراخوانی و اجرای مجموعه ای از کدها ممکن است نتیجه نهایی را برگشت دهد. در جاوااسکریپت به این بازگشت return گفته میشود.مقدار بازگشتی تعلق به کدی دارد که آن را فراخوانی کرده است.
اگر کدی بعد از return نوشته شود آنها دیگر اجرا نمیشوند.
مثال:
1 2 3 4 5 6 7 8 |
let x = myFunction(4, 3); // Function is called, return value will end up in x function myFunction(a, b) { return a * b; // Function returns the product of a and b } //12 |
توضیح دستور بالا
تابع myFunction توسط متغیر x فراخوانی شده است. در هنگام فراخوانی مقادیر ۴ و ۳ بترتیب به تابع ارسال شده است. خود تابع پارامترهای a و b را دارد.
مقادیر a و b در هم ضرب شده و بازگشت داده شده است. متغیر x بعد از اجرا مقدار ۱۲ را دارد.
چرا باید از توابع استفاده کنیم؟
هدف از نوشتن تابع کوتاه کردن کدی است که ممکن است چندین بار از آن و در شرایط مختلف ازش استفاده شود. به همین منظور یک بار آن را نوشته و هربار آن را صدا میزنیم.
در این حالت مقادیر مختلفی را میتوانیم بعنوان پارامتر به درون تابع ارسال کنیم.
در مثال زیر تابع toCelsius یک پارامتر بعنوان عدد برای فارنهایت وارد کرده و در نهایت مقدار سلسیوس آن برگشت داده می شود.
مثال:
1 2 3 4 5 |
function toCelsius(fahrenheit) { return (5/9) * (fahrenheit-32); } document.getElementById("demo").innerHTML = toCelsius(77); //25 |
نحوه فراخوانی تابع
اگر نام تابع را به تنهایی وارد کنیم تنها به خود تابع اشاره میکند در صورتیکه اگر نام تابع با پرانتز فراخوانی شود به نتیجه تابع اشاره میکند.
مثال:
1 2 3 4 5 6 7 8 9 |
function toCelsius(fahrenheit) { return (5/9) * (fahrenheit-32); } document.getElementById("demo").innerHTML = toCelsius; /* function toCelsius(fahrenheit) { return (5/9) * (fahrenheit-32); } */ |
متغیرها می توانند نماینده نتیجه اجرایی توابع باشند.
شما میتوانید نتیجه اجرایی تابع را به یک متغیر تخصیص دهید تا از آن در داخل عبارت های خود استفاده کنید.
مثال:
1 2 3 |
let x = toCelsius(77); let text = "The temperature is " + x + " Celsius"; // The temperature is 25 |
این امکان هم وجود دارد که به جای تخصیص نتیجه تابع به متغیر مستقیما از آن درون عبارت های خود استفاده کنید. برای اینکار تابع را باید با عملیات concatenation به رشته بچسبانیم. اجرای مستقیم تابع درون رشته امکان پذیر نیست.
مثال:
1 2 |
let text = "The temperature is " + toCelsius(77) + " Celsius"; // The temperature is 25 Celsius |
متغیرهای محلی در توابع
متغیرهایی که درون تابع تعریف میشود دارای محدوده عمومی هستند. این متغیرها تنها از طریق خود تابع در دسترس هستند.
مثال:
1 2 3 4 5 6 |
function myFunction() { let carName = "Volvo"; // code here CAN use carName } echo carName; //Not show value of variable carName |
شما میتوانید در درون توابع مختلف از نام متغیر یکسان استفاده کنید.
متغیرهای محلی با فراخوانی تابع ایجاد شده و پس از اجرا حذف میشود. برای نگهداری مقدار نهایی از کلمه کلیدی static که در جلسات قبل آموزش داده شد استفاده کنید.
تعریف مقدار پیش فرض برای آرگومان ها
توابع همانند کارخانه ای میمانند که باید یک ورودی و خروجی داشته باشند و وظیفه آن انجام اقداماتی بر روی ورودی های داده شده است.
در اکما ۵ نمیتوانیم برای آرگومان های خود بصورت معمول مقدار پیش فرض قرار دهیم. برای قرار دادن باید از روش زیر استفاده کنیم. در روش زیر گفته ایم در صورتی که آرگومان مقدار داشت مقدارش را تخصیص بده نداشت برابر با رشته خالی قرار بده.
مثال:
1 2 3 4 |
function Name(x, y){ var x = x || ""; var y = y || ""; } |
یک تابع بسته به نوع کاری که قرار است انجام دهد ممکن است مقداری را برگشت دهید یا مستقیما مقداری را چاپ کند. برای برگشت مقدار از دستور return استفاده میکنیم. هر مقداری بعد از این دستور دیگر بررسی نمیشود.
مثال:
1 2 3 |
function Name(x, y){ return value; } |
تعریف تابع بصورت متغیر
در تعریف تابع هم می توان به روش پایه ای که در قسمت بالا توضیح داده شد استفاده کنیم هم از روش ایجاد متغیر و تخصیص تابع به آن.
در این حالت نام متغیر حاوی تابع مورد نظر ما می باشد.
نام متغیر را می توان با var,let یا const ایجاد کرد.
برای تعریف متغیر خود را ایجاد کرده سپس آن را برابر با کلمه کلیدی function قرار میدهیم.پس از واژه function یک پرانتز قرار داده و می توان پارامترهای تابع را دریافت کنیم.
در انتها بلاک خود را با استفاده از {} ایجاد کرده و دستورات خود را درون آن مینویسیم.
نحوه نوشتن:
1 |
var,let,const Variable = function(arguments){} |
مثال:
1 2 3 |
let alertMe = function(){ alert(dejavan.ir); } |
استفاده از تابع
برای استفاده از تابع تنها لازم است نام متغیر را با استفاده از () فراخوانی کنیم در صورت وجود پارامتر آن را درون پرانتز وارد کنیم.
مثال:
1 |
alertMe(); |