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

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

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

اجرای یک تابع در جاوا اسکریپت[ویرایش | ویرایش]

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

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

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

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

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

اجرای یک تابع به صورت یک تابع[ویرایش | ویرایش]

مثال[ویرایش | ویرایش]

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


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


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

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

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

myfunction() و متد window.myFunction() هر دو یک تابع هستند:

مثال[ویرایش | ویرایش]

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


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


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

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

کلمه کلیدی this[ویرایش | ویرایش]

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

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

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

شیء کلی (Global)[ویرایش | ویرایش]

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

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

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

مثال[ویرایش | ویرایش]

var x = myFunction();            // x will be the window object

function myFunction() {
  return this;
}


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


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

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

اجرای یک تابع به صورت یک متد[ویرایش | ویرایش]

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

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

مثال[ویرایش | ویرایش]

var myObject = {
  firstName:"John",
  lastName: "Doe",
  fullName: function () {
    return this.firstName + " " + this.lastName;
  }
}
myObject.fullName();         // Will return "John Doe"


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


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

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

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

مثال[ویرایش | ویرایش]

var myObject = {
  firstName:"John",
  lastName: "Doe",
  fullName: function () {
    return this;
  }
}
myObject.fullName();          // Will return [object Object] (the owner object)


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


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

اجرای یک تابع با متد سازنده تابع (Function Constructor)[ویرایش | ویرایش]

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

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

مثال[ویرایش | ویرایش]

// This is a function constructor:
function myFunction(arg1, arg2) {
  this.firstName = arg1;
  this.lastName  = arg2;
}

// This creates a new object
var x = new myFunction("John", "Doe");
x.firstName;                             // Will return "John"


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


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

کلمه کلیدی this در متد سازنده مقداری ندارد.

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


منابع آموزشی[ویرایش]