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

از ویکی‌کد
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
تعریف شیء در جاوا اسکریپت
تابع در جاوا اسکریپت
۱تعریف تابع
۲پارامتر توابع
۳فراخوانی تابع
۴صدا کردن تابع
۵تابع Apply
۶بسته‌ها
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
جی‌کوئری در برابر جاوا اسکریپت
مثال‌های جاوا اسکریپت
مرجع جاوا اسکریپت

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

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

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

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

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

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

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

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

مثال

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


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


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

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

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

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

مثال

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


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


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

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

کلمه کلیدی this

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

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

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

شیء کلی (به انگلیسی: Global)

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

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

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

مثال

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


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


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

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

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

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

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

مثال

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


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


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

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

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

مثال

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


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


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

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

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

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

مثال

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


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


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

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

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


منابع آموزشی