توابع جاوا اسکریپت

در

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

مبین های تابع (Function Expression)

هنگامی که به سادگی تابعی را با کلید واژه function بیان می کنید، این تابع می تواند پارامترهای اختیاری و بدنه کد (body of code) باشد، این کلیدواژه اعلان تابع (function declaration) خواهد بود.
هرگاه این اعلان را به زبان جاوااسکریپت بیان کنید ( همانند مبین حسابی (arithmetic expression) یا مبین تخصیصی (assignment))، تبدیل به مبین تابع می شود.
تمام اعلان های جاوااسکریپت در طول ارزیابی، در محدوده مقادیر تعریف شده برای یک متغیر، ارتقا می یابند و بالا برده می شوند (hoisting). از این رو نوشتن فراخوانی تابع قبل از اعلان تابع صحیح است (زیرا اعلان به هر حال بالا خواهد رفت).
از آن جا که توابع به بخشی از مبین ها تبدیل می شوند و دیگر اعلان های صرف و مستقلی نیستند، در نتیجه مبین های تابع بالا برده نمی شوند.
(Immediately Invoked Function Expression (IIFE
این تابع یک مبین تابع است، کدی که بلافاصله اجرا می شود (به محض اینکه بررسی شد). به سادگی می توان یک تابع این چنینی را با اضافه کردن () (یک ساختار دستوری که برای فراخوانی یک تابع استفاده می شود)، درست پس از مبین تابع ایجاد کرد. این توابع می توانند بی نام باشند (نامی برای فراخوانی انها وجود نداشته باشد).
در ادامه دو ساختار دستوری بسیار متداول برای ایجاد IIFE معرفی می کنیم.
پرانتز اطراف اعلان تابع، ان را به یک مبین تابع تبدیل کرده و سپس با اضافه کردن () پس از ان تابع فراخوانی می شود. میتوانید از راههای دیگر برای ایجاد IIFE استفاده کنید، به شرطی که پس از مبین تابع () را اضافه کنید (همانند موردی که در ادامه مطرح خواهیم کرد)، اما دو روشی که مطرح خواهیم کرد برتر از بقیه روش ها هستند.
IIFE برای نوشتن کدی که فقط یک بار نیاز به اجرا شدن دارند ایده ال است، همانند ایجاد فضای اسم (namespace)، ایجاد کلوژر یا closures، ایجاد متغیرهای خصوصی و بیشتر. در زیر مثالی از کاربرد IIFE ذکر شده است.
کدی برای اجرا کردن زبان صفحه، آن هم فقط یک بار (ترجیحا پس از بارگذاری صفحه). نتیجه به منظور استفاده های بعدی، در زبان صفحه ذخیره (page-language) می شود.

روش ها

هر گاه تابع جزء دارایی شی (object’s property) باشد، متد (object’s property) نامیده می شود. از آن جا که تابع نیز یک شی می باشد، تابعی که درون یک تابع دیگر قرار می گیرد نیز یک متد است. در زیر نمونه ای از شی ای که درون متد تعریف می شود، ذکر می گردد.
توابع add و sub متدهای شی calc هستند.
حال مثالی از تابع درون تابع:
تابع بازگشتی (returned anonymous function ) بدون نام، متد تابع add است.
نکته: از آنجا که در مثال بالا، پارامتر (a) تابع add در دسترس تابع invoke زیر قرار دارد، این نوع پردازش currying نامیده می شود.

Constructors

هرگاه کلیدواژه new را قبل از تابع اضافه و ان را فراخوانی کنید، این تابع به یک constructor تبدیل می شود که instances ((در برنامه‌ نويسى‌ شى‌ گرا) شى‌ اى‌ يا شى‌ تكرارى‌ كه‌ ايجاد شده‌ اند) را ایجاد می کند. در زیر مثالی ارائه شده است که در ان constructorها برای ایجاد instanceی از Fruit استفاده شده و مقادیری به خواص هر Fruit اضافه می شود.

توابع Arrow (استاندارد ES6) [فقط در فایرفاکس]

تعریف تابع جدیدی از استاندارد ES6، ساختار دستوری کوتاه تری را برای مبین تابع در اختیار قرار می دهد.

توابع Arrow بی نام هستند و مقدار this مختص به خود را ندارند، this درونی همانند this موجود در enclosing code خواهد بود. بعلاوه، نمی­توانید این توابع را با کلیدواژه new به یک constructor تبدیل کنید.

زمانیکه می­خواهید this درون تابع همانند this بیرون تابع باشد به کار می­آیند و ساختار دستوری کوتاه تر این تابع، کد را برای نوشتن تابعی درون تابعی دیگر، فشرده می سازد.

نظرات

در ادامه بخوانید...