با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، یکی از بخش های اصلی و بسیار پرکاربرد در اکثر زبان های برنامه نویسی، تعریف توابع در هر زبان برنامه نویسی می باشد، توابع یک بلوک کد مشخص می باشد که می تواند پارامترهایی را دریافت کرده و پس از انجام عملیات مختلف یک خروجی برگرداند، البته می تواند بدون بازگشت خروجی نیز تعریف شود، تعریف توابع به کاهش حجم و خوانایی کدها کمک بسیاری می کند، البته در زبان های برنامه نویسی مختلف شکل و سینتکس تعریف و استفاده از توابع تقریبا متفاوت است، از این رو در این بخش ما به بررسی تعریف های تابع در جاوا اسکریپت پرداخته ایم، با ما همراه باشید.
در ادامه این بخش شما را با انواع تعریف های تابع در جاوا اسکریپت و سینتکس آن ها آشنا می کنیم.
توابع جاوا اسکریپت با کلمه ی کلیدی function تعریف می شوند.
همچنین شما می توانید از یک تعریف تابع و یا عبارت (expression) تابع استفاده کنید.
در بخش های قبلی این دوره ما به سینتکس کلی تعریف تابع در جاوا اسکریپت اشاره کردیم :
1 2 3 | function functionName(parameters) { code to be executed } |
توابع تعریف شده بلافاصله اجرا نمی شوند.بلکه آنها “برای استفاده های بعدی ذخیره شده اند” و در زمان لازم فراخوانی و اجرا می شوند.
1 2 3 | function myFunction(a, b) { return a * b; } |
سمیکالن ها برای جدا کردن آبجکت های اجرایی جاوا استفاده می شود.
از آنجا که یک تابع تعریف شده یک عبارت اجرایی نیست، متداول است که آن را با یک نقطه کلاسیک متوقف کنید.
توابع جاوا اسکریپت را همچنین می توان به صورت عبارت (expression) تعریف کرد.
یک عبارت تابع همچنین می تواند در یک متغیر ذخیره شود :
پس از تعریف تابع در یک متغیر ذخیره می شود،و متغیر می تواند به عنوان یک تابع استفاده شود:
1 2 | var x = function (a, b) {return a * b}; var z = x(4, 3); |
تابع بالا در واقع یک تابع ناشناس (یک تابع بدون نام) است.
توابع ذخیره شده در متغیرها نیازی به نام تابع ندارند. آنها همیشه با استفاده از نام متغیر (call) فراخوانی می شوند.
نکته : تابع فوق با semicolon به پایان می رسد زیرا بخشی از یک عبارت اجرایی است.
همانطور که در مثال قبلی نیز مشاهده کردیم، توابع جاوا اسکریپت با کلیدواژه function تعریف می شوند.
توابع را می توان با یک ساختار ساخته شده در جاوا اسکریپت () Function تعریف کرد.
1 2 3 | var myFunction = new Function("a", "b", "return a * b"); var x = myFunction(4, 3); |
شما در واقع لازم نیست از تابع سازنده استفاده کنید. مثال فوق همانند سینتکس زیر است:
1 2 3 | var myFunction = function (a, b) {return a * b}; var x = myFunction(4, 3); |
نکته : در اغلب موارد شما می توانید از کلید واژه ی new در جاوا اسکریپت به دلیل پیچیده تر شدن کد و مشکلات دیگر، صرف نظر کنید.
پیش از این در آموزش های قبلی، در مورد ویژگی “hoisting” مطالبی را ارائه کردیم.
رفتار hoisting پیش فرض جاوا اسکریپت است که تعاریف را به بالاترین سطح کدها می برد.
Hoisting روی تعریف متغیر و تعریف توابع اعمال می شود.
به همین دلیل، توابع جاوا اسکریپت می توانند قبل از اینکه تعریف شوند، فراخوانی شوند:
1 2 3 4 5 | myFunction(5); function myFunction(y) { return y * y; } |
البته در توابعی که به صورت عبارت تعریف شده اند، Hoisting اعمال نمی شود.
توابع خودکار (self-invoking) عبارت توابع هستن که در حالت “self-invoking” ایجاد می شوند.
یک عبارت self-invoking می تواند به طور خودکار و بدون اینکه نیاز به فراخوانی باشد، شروع به اجرا کند.
عبارات توابع در صورتی به طور خودکار اجرا خواهند شد که در جلوی تعریف عبارت () قرار دهیم.
یک تابع از نوع تعریف معمولی نمی تواند ویژگی self-invoke را داشته باشد.
شما باید پرانتز در اطراف تابع اضافه کنید تا نشان دهد که این یک عبارت تابع است:
1 2 3 | (function () { var x = "Hello!!"; // I will invoke myself })(); |
تابع بالا در واقع یک تابع self-invoking ناشناس است (تابع بدون نام).
توابع جاوا اسکریپت می توانند به عنوان مقادیر استفاده شوند :
1 2 3 4 5 | function myFunction(a, b) { return a * b; } var x = myFunction(4, 3); |
1 2 3 4 5 | function myFunction(a, b) { return a * b; } var x = myFunction(4, 3) * 2; |
عملگر typeof در جاوا اسکریپت “function” را برای توابع بازگشت می دهد.
اما توابع جاوا اسکریپت می توانند بهترین آبجکت ها باشند.
توابع جاوا اسکریپت دارای خصوصیات و متدها هستند.
خصوصیت arguments.length طول مقدار آرگومان دریافت شده را هنگام فراخوانی تابع به دست می دهد:
1 2 3 | function myFunction(a, b) { return arguments.length; } |
متد () toString یک تابع را به عنوان یک رشته بازمی گرداند.
1 2 3 4 5 | function myFunction(a, b) { return a * b; } var txt = myFunction.toString(); |
یک تابع تعریف شده به عنوان ویژگی یک آبجکت، یک متد برای آبجکت نامیده می شود.
یک تابع طراحی شده برای ایجاد آبجکت جدید، سازنده آبجکت است.
توابع Arrow اجازه ی نوشتن یک سینتکس کوتاه برای عبارت تابع را می دهد.
شما به کلیدواژه function ، کلمه کلیدی return و براکت های کروشه نیاز ندارید.
1 2 3 4 5 6 7 | // ES5 var x = function(x, y) { return x * y; } // ES6 const x = (x, y) => x * y; |
توابع Arrow این کار را ندارند. آنها برای تعریف متدهای آبجکت مناسب نیستند.
توابع Arrow افزایش نمی یابد. آنها باید قبل از استفاده تعریف شوند.
استفاده از const امن تر از استفاده از var است، زیرا یک عبارت تابع همیشه مقدار ثابت دارد.
اگر تابع یک دستور واحد باشد.شما فقط می توانید کلمات کلیدی بازگشت و براکت های curly را حذف کنید. از این جهت ممکن است عادت خوبی باشد که همیشه آنها را حفظ کنید:
نکته : توابع Arrow در مرورگر IE11 و نسخه های قدیمی تر پشتیبانی نمی شود.
همانطور که اشاره کردیم، توابع در اکثر زبان های برنامه نویسی به عنوان یکی از ساختارهای پایه و اصلی کدنویسی کاربرد فراوانی دارد، که در هر زبانی سینتکس خاص خود را دارد،از این رو در این مبحث به مباحث تعریف های تابع در جاوا اسکریپت پرداختیم.