وب

قدرت توابع جاوا اسکریپت – بخش اول

“توابع بهترین بخش از جاوا اسکریپت هستند. در حقیقت، بیشترین قدرت و زیبایی این زبان، توابع آن است.” داگلاس کراکفورد Douglas Crockford

توابع را می توان به عنوان نیروی کار جاوا اسکریپت در نظر گرفت. توابع به تنهایی نقش هایی را بازی می کنند که در زبان های دیگر با ویژگی های متعدد متمایز انجام می شوند: پروسه ها، روش ها، سازنده ها و حتی کلاس ها و ماژول ها. هر کدام از این موارد با استفاده از طیف وسیعی از توابع انجام می شوند.(توصیه می شود دوره آموزشی طراحی سایت و پکیج آموزش طراحی سایت  را مشاهده کنید)

در جدیدترین نسخه جاوا اسکریپت، مفاهیمی مانند کلاس / class، روش / method و سازنده / constructor معرفی شده اند، اما این موارد چیزی نیست جز همان ویژگی هایی که از قبل توسط این توابع پوشش داده شده است.

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

جاوا اسکریپت

توابع جاوا اسکریپت به عنوان اشیاء

یک ویژگی مهم جاوا اسکریپت، این واقعیت است که توابع نوع خاصی از شیء هستند. اعلان / Declaring یک تابع، مشابه یک object literal است زیرا یک تابع object را تولید می کند.

این تابع شیء اولین شی کلاس بندی شده است: و می توان آن را به آرگومان، بازگشت از یک تابع، اختصاص به یک متغیر، ذخیره در یک شی یا آرایه منتقل کرد، در واقع هر چیزی که می توانید با یک شی انجام دهید، می توانید با یک تابع نیز انجام دهید. این ویژگی از Function.prototype گرفته می شود که به روش هایی مانند bind ، apply و call دسترسی پیدا می کند.

برای بسیاری از توسعه دهندگان که در زبان های دیگر تجربه دارند، نگاه به یک تابع به عنوان یک شیء ممکن است تغییر بزرگی باشد، اما درک آن باعث می شود که آن چیزی که درباره آن صحبت خواهیم کرد، معنای بیشتری پیدا کند.

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

دو روش اعلان برای یک تابع وجود دارد:

تابع کلمه کلیدی مقدم بر اعلان است. نام برای بیان تابع، اختیاری است اما برای اعلان تابع اجباری است.

یکی دیگر از جنبه های جاوا اسکریپت که ارزش توجه را دارد این است که در جاوا اسکریپت مفهوم “امضا تابع” ​​وجود ندارد. شما می توانید بدون برخورد با هر گونه خطایی، هر تابعی را برای هر تعداد کم یا زیاد آرگومان که می خواهید فراخوانی کنید. اگر آرگومان ها با مقدار ارائه نشده باشند، آنها تعریف نشده اند. خوشبختانه، برای دانستن دقیق تعداد آرگومان ارائه شده با استفاده از شیء آرگومان، راهی وجود دارد.

توابع جاوا اسکریپت به یک بازگشت صریح نیاز ندارند، اما مهم این است که بدانیم که وقتی هیچ بازگشت صریحی ایجاد نمی شود، تابع undefined را بر می گرداند. تنها استثناء این قاعده، تابعی است که به عنوان یک سازنده استفاده شده است و یک شی جدید را بر می گرداند.

یاد آوردی:

  • امضای تابع وجود ندارد: هر تابع را می توان با هر تعداد از آرگومان فراخوانی کرد.
  • تابع جاوا اسکریپت همیشه یک مقدار را بر می گرداند: اگر صریحا ارائه نشده باشد، پس تعریف نشده است (به جز سازنده که شیء جدید را بر می گرداند)
  • به عنوان بهترین تمرین، توصیه می شود که یا همیشه مقدار یک تابع را برگردانید یا هرگز چیزی را برنگردانید.

جاوا اسکریپت

محدوده متغیر در جاوا اسکریپت

محدوده متغیر تعیین کننده دسترسی (دید) یک متغیر است. در جاوا اسکریپت، دو نوع محدوده وجود دارد: سراسری / global و محلی / local (در داخل یک تابع).

هر وقت یک تابع فراخوانی می شود، یک محدوده جدید ایجاد می شود. متغیرهای محلی، محدوده محلی دارند: آن ها فقط درون تابع قابل دسترسی هستند.

هنگامی که یک متغیر با استفاده از var اعلان می شود، به صورت خودکار به “اولین” محدوده موجود اضافه می شود. در یک تابع، اولین محدوده، محتوای محلی تابع خواهد بود. از آن جایی که متغیر های محلی فقط در داخل توابع آن ها شناخته می شوند، متغیر هایی با همان نام در تابع های مختلف مورد استفاده قرار می گیرند.

هر تابع در جاوا اسکریپت محدوده خاص خود را دارد، و هر متغیری که در آن تابع اعلان شده است فقط برای آن تابع قابل دسترسی است. با این حال، یک متغیر سراسری می تواند در داخل یک تابع استفاده شود، مگر این که متغیر دیگری با همان شناسه در آن تابع استفاده شود.

یکی دیگر از ویژگی های جاوا اسکریپت این واقعیت است که محدوده ای در سطح بلوک ندارد. محدوده سطح بلوك به این معنی است كه اگر متغیر در داخل یک بلوك (for, while, if و غیره) اعلام شده باشد، تنها در آن وجود دارد و خارج از آن قابل دسترسی نیست. به عنوان مثال، شما ممکن است انتظار داشته باشید که این کد کار کند.

با این حال، متغیر i از اولین for، هر بار در قسمت دوم مجددا تعیین می شود و این تابع بعد از اولین ردیف، خارج می شود.

توجه: با هدف حل این مسئله، در آخرین نسخه جاوا اسکریپت (ECMAScript 6)، کلمه کلیدی let معرفی شد. یک متغیر که با let اعلان شده است، در یک بلوک مورد استفاده قرار می گیرد، و یک محدوده در سطح بلوک خواهد داشت. بنابراین، به سادگی، با تغییر var به let در مثال بالا، سبب می شود که کد کار کند.

بالا بردن متغیر / Variable hoisting

بالا بردن / Hoisting یک رفتار پیش فرض در جاوا اسکریپت است و نشان دهنده حرکت همه اعلان های متغیر به بالای محدوده، قبل از اجرای کد است. بنابراین مهم نیست که در کجای توابع یک متغیر را اعلام کنیم، متغیر به آن محدوده از ابتدای متن اجرا، تعلق دارد. با این حال، بالا بردن تنها برای اعلام متغیر اتفاق می افتد، نه تخصیص متغیر. بنابراین قبل از رسیدن به خطی که در آن به متغیر صریحا مقدار داده شده است، متغیر نامشخص است.

بیایید مثالی را ببینیم

این تابع به هر متغیر و به عبارت توابع / function expression نیز اعمال می شود. همانطور که در مثال مشاهده می کنید، عبارت توابع بسیار شبیه به یک object literal است.

با این حال در جاوا اسکریپت، تفاوت های ظریفی بین عبارت تابع / function expression و حالت تابع / function statements وجود دارد.

یاد آوری:

Hoisting، اعلان را به سمت بالا حرکت می دهد، اما مقداردهی اولیه نمی کند؛ قبل از این که به صراحت یک مقدار را اختصاص دهیم، متغیر نامشخص است.

اگر به ادامه این بحث علاقه مند هستید، به مقاله قدرت توابع جاوا اسکریپت – بخش دوم، مراجعه کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا