فراخوانی تابع

از ویکی‌کد، دانشنامهٔ برنامه‌نویسی
پرش به ناوبری پرش به جستجو

کد جاوا اسکریپت درون یک تابع زمانی اجرا می‌شود که «چیزی» آن را فراخوانی کند.[۱]

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

کد درون یک تابع زمانی که تابع تعریف می‌شود اجرا نمی‌گردد.

کد درون یک تابع زمانی اجرا می‌شود که تابع فراخوانی شود.

استفاده از «عبارات صدا کردن یک تابع» به جای فراخوانی «تابع مرسوم» است.

همچنین عباراتی مانند «با یک تابع تماس بگیرید»، «یک تابع را شروع کنید» یا «یک تابع را اجرا کنید».

در این آموزش ما از کلمهٔ اجرا استفاده می‌کنیم، زیرا که یک تابع جاوا اسکریپت می‌تواند بدون اینکه فراخوانی یا صدا شود اجرا گردد.

اجرای یک تابع به صورت یک تابع

مثال

1function myFunction(a, b) {
2  return a * b;
3}
4myFunction(10, 2);           // Will return 20


مشاهدهٔ نتیجه


تابع فوق مربوط به هیچ نوع شی ای نیست. اما در جاوا اسکریپت یک شیء کلی یا جهانی پیشفرض وجود دارد.

در HTML شیء پیشفرض کلی (global) خود صفحه وب HTML است، بنابراین، تابع فوق به صفحه وب HTML «اشاره» می‌کند.

در یک مرورگر شیء صفحه پنجره مرورگر است. تابع فوق به صورت خودکار به یک تابع پنجره یا window تبدیل می‌شود.

الگو:code و متد الگو:code هر دو یک تابع هستند:

مثال

1function myFunction(a, b) {
2  return a * b;
3}
4window.myFunction(10, 2);    // Will also return 20


مشاهدهٔ نتیجه


اجرا شدن یک تابع یک روش رایج است اما تمرین خیلی خوبی نیست.

متغیرهای کلی (global)، متدها یا توابع به راحتی می‌توانند موجب ایجاد ناسازگاری نام‌ها و ایجاد باگ در شیء (object) کلی شوند.

کلمه کلیدی this

در جاوا اسکریپت، چیزی که کلمه الگو:code را فراخوانی می‌کند، شیء است که کد جاری را «نگهداری» می‌کند.

مقدار کلمه کلیدی الگو:code، زمانی که در یک تابع استفاده می‌شود، شیء است که «صاحب» تابع است.

توجه کنید که الگو:code یک متغیر نیست. این یک کلمه کلیدی است. شما نمی‌توانید مقدار کلمه الگو:code را تغییر دهید.
نکته:در مورد کلمه الگو:code می‌توانید مطالب بیشتری را در فصل کلمه کلیدی this در جاوا اسکریپت بخوانید.

شیء کلی (Global)

زمانی که یک تابع بدون شیء صاحب، فراخوانی می‌شود، مقدار کلمه الگو:code به شیء کلی (Global) برمی گردد.

در یک مرورگر وب، شیء کلی، پنجره مرورگر است.

این مثال، شیء پنجره (Window) را به عنوان مقدار کلمه کلیدی الگو:code برمی‌گرداند:

مثال

1var x = myFunction();            // x will be the window object
2
3function myFunction() {
4  return this;
5}


مشاهدهٔ نتیجه


اجرای یک تابع به صورت یک تابع کلی موجب می‌شود که کلمه کلیدی this به شیء کلی اشاره کند.

استفاده از شیء پنجره یا window به راحتی می‌تواند موجب از هم پاشیدن (Crash) نرم‌افزار شما شود.

اجرای یک تابع به صورت یک متد

در جاوا اسکریپت، شما توابع را به صورت متدهایی از شیء (object) تعریف می‌کنید.

مثال زیر یک شیء (myObject) می‌سازد، که دو ویژگی (firstName و lastName) و یک متد (fullName) دارد:

مثال

1var myObject = {
2  firstName:"John",
3  lastName: "Doe",
4  fullName: function () {
5    return this.firstName + " " + this.lastName;
6  }
7}
8myObject.fullName();         // Will return "John Doe"


مشاهدهٔ نتیجه


متد fullName یک تابع است. تابعی که به شیء مربوط می‌شود. myObject صاحب تابع است.

چیزی که کلمه کلیدی الگو:code را فراخوانی می‌کند، شیء است که «صاحب» کد جاوا اسکریپت است. در این مثال مقدار الگو:code به شیء myObject اشاره دارد.

این مسئله را امتحان کنید! متد fullName را تغییر دهید تا مقدار کلمه کلیدی الگو:code را برگرداند:

مثال

1var myObject = {
2  firstName:"John",
3  lastName: "Doe",
4  fullName: function () {
5    return this;
6  }
7}
8myObject.fullName();          // Will return [object Object] (the owner object)


مشاهدهٔ نتیجه


اجرای یک تابع به صورت متدی از یک شیء، موجب می‌شود که کلمه کلیدی الگو:code به خود شیء اشاره کند.

اجرای یک تابع با متد سازنده تابع (Function Constructor)

اگر اجرای یک تابع به وسیله کلمه کلیدی الگو:code صورت بگیرد، این نوع اجرا، اجرای متد سازنده (Constructor) است.

اینطور به نظر می‌رسد که شما یک تابع جدید تعریف کرده‌اید، اما ازآنجایی که توابع در جاوا اسکریپت نیز شیء هستند شما درحقیقت یک شیء جدید ساخته‌اید:

مثال

1// This is a function constructor:
2function myFunction(arg1, arg2) {
3  this.firstName = arg1;
4  this.lastName  = arg2;
5}
6
7// This creates a new object
8var x = new myFunction("John", "Doe");
9x.firstName;                             // Will return "John"


مشاهدهٔ نتیجه


اجرای یک تابع با استفاده از متد سازنده (constructor) یک شیء جدید می‌سازد. این شیء جدید ویژگی و متدها را از سازنده خودش به ارث می‌برد.

کلمه کلیدی الگو:code در متد سازنده مقداری ندارد.

مقدار الگو:code برابر با شیء خواهد بود که هنگامی تابع اجرا می‌شود، ساخته خواهد شد.


منابع آموزشی