ترجمه‌ی فراخوانی توابع JavaScript

کد درونی توابع JavaScript در هنگام فراخوانی آن‌ها توسط ‘چیزی’ اجرا می‌شود.

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

وقتی توابعتعریفوقتی، کد درونی توابع اجرا نمی‌شود.

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

فراخوانی توابع معمولاً می‌توانند به عنوان “اجرای توابع” یا “فعال‌سازی توابع” نیز گفته شوند.

در این آموزش، ما از “فراخوانی.”

با فراخوانی به صورت تابع توابع فراخوانی می‌شوند

مثال

function myFunction(a, b) {
    return a * b;
}
myFunction(10, 2);           // به 20 بازمی‌گردد

آزمایش کنید

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

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

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

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

مثال

function myFunction(a, b) {
    return a * b;
}
window.myFunction(10, 2);    // همچنین 20 بازمی‌گرداند

آزمایش کنید

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

متغیرهای جهانی، روش‌ها یا توابع به راحتی در شیء جهانی می‌توانند منجر به نام‌گذاری‌های متعارض و آسیب‌پذیری‌ها شوند.

this کلمه کلیدی

در JavaScript، به عنوان this اشیاء مورد آزمایش، شیءهایی هستند که "دارنده" کد فعلی را دارند.

this مقدار آن، در زمان استفاده در تابع، شیء دارنده تابع است.

لطفاً توجه کنید this این یک متغیر نیست. به عنوان یک کلمه کلیدی تعلق دارد. شما نمی‌توانید آن را تغییر دهید this مقدار آن.

شیء جهانی

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

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

این مثال با this مقدار آن این شیء window را بازمی‌گرداند:

مثال

var x = myFunction();            // x به شیء window تبدیل می‌شود
function myFunction() {
   return this;
}

آزمایش کنید

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

به راحتی با استفاده از شیء window برنامه‌ها را از کار می‌اندازید.

توابع را به عنوان روش فراخوانی کنید

در JavaScript، شما می‌توانید توابع را به عنوان روش‌های اشیاء تعریف کنید.

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

مثال

var myObject = {
    firstName: "Bill",
    lastName: "Gates",
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }
}
myObject.fullName();         // این کار به بازگشت "Bill Gates" منجر می‌شود

آزمایش کنید

method fullName یک تابع است. این تابع به اشیاء تعلق دارد. myObject مالک تابع است.

به عنوان this اشیاء مورد آزمایش، اشیایی هستند که "مالک" این کد JavaScript را دارند. در این مثال،this مقدار آن myObject است.

یک تست انجام دهید! این روش fullName را تغییر دهید تا بازگرداند this مقدار:

مثال

var myObject = {
    firstName: "Bill",
    lastName: "Gates",
    fullName: function () {
        return this;
    }
}
myObject.fullName();          // این کار به بازگشت [object Object] (مالک اشیاء) منجر می‌شود

آزمایش کنید

با فراخوانی تابع به عنوان روش شیء، this شیء خود را خواهد شد.

مقدار

با فراخوانی تابع از طریق سازنده تابع قبل از فراخوانی تابع باشد، اگر کلمه کلیدی

به نظر می‌رسد که شما یک تابع جدید ایجاد می‌کنید، اما به دلیل اینکه توابع JavaScript شیء هستند، شما در واقع یک شیء جدید ایجاد می‌کنید:

مثال

// این سازنده تابع است:
function myFunction(arg1, arg2) {
    this.firstName = arg1;
    this.lastName  = arg2;
}
// یک شیء جدید ایجاد شده است:
var x = new myFunction("Bill", "Gates");
x.firstName;                             // "Bill" را برمی‌گرداند"

آزمایش کنید

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

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

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