فراخوانی تابع (Function Invocation)
کد داخل «تابع (Function)» وقتی اجرا می شود که چیزی آن را «فراخوانی (Invoke)» کند. گاهی می گویند «Call»؛ اما در جاوااسکریپت، فراخوانی همیشه فقط «Call» نیست.
فراخوانی تابع به صورت عادی
کد تابع هنگام «تعریف» اجرا نمی شود. هنگام «فراخوانی» اجرا می شود.
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2);
نکته: تابعِ بدون مالک، به شیء سراسری تعلق می گیرد و ممکن است تداخل بسازد.
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2);
شیء سراسری و this
در مرورگر، شیء سراسری «window» است. فراخوانیِ بدون مالک، this را window می کند.
let x = myFunction();
function myFunction() {
return this;
}
هشدار: استفاده بی دقت از window می تواند با نام ها تداخل ایجاد کند.
فراخوانی به عنوان «متد (Method)»
وقتی تابع داخل شیء باشد، به آن «متد» می گوییم. این جا this همان شیء است.
const myObject = {
firstName: "John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
};
myObject.fullName();
اگر متد مقدار this را برگرداند، می بینی مالک کیست.
const myObject = {
firstName: "John",
lastName: "Doe",
fullName: function () {
return this;
}
};
myObject.fullName();
فراخوانی سازنده با new
اگر قبل از تابع new بیاید، یک «سازنده (Constructor)» است. شیء تازه می سازد و this به آن شیء اشاره می کند.
function MyFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
const myObj = new MyFunction("John", "Doe");
myObj.firstName;
گام های تمرینی
- یک تابع ساده بنویس و آن را فراخوانی کن.
- همان تابع را با window صدا بزن.
- یک شیء با متد بساز و this را بررسی کن.
جمع بندی سریع
- تعریف اجرا نیست؛ فراخوانی اجراست.
- فراخوانیِ بدون مالک، this را سراسری می کند.
- متدها this را برابر مالک می کنند.
- new شیء تازه می سازد و this را تنظیم می کند.
برای ادامه «پارامترهای تابع» را مرور کن. سپس مبحث «this در جاوااسکریپت» را بخوان تا «فراخوانی تابع» را عمیق تر درک کنی.