Function Invocation

وقتی یک تابع در جاوااسکریپت تعریف می‌کنیم، برای اجرا شدن باید فراخوانی (invoke) بشه.
روش‌های مختلفی برای فراخوانی تابع وجود داره:

1️⃣ فراخوانی به‌صورت مستقیم

ساده‌ترین روش:

function greet(name) { return "Hello " + name; } console.log(greet("Ali")); // Hello Ali

2️⃣ فراخوانی به عنوان متد (Method Invocation)

وقتی تابع داخل یک شیء تعریف می‌شه، با استفاده از object.method() صدا زده می‌شه.

const person = { name: "Sara", greet: function() { return "Hi, I'm " + this.name; } }; console.log(person.greet()); // Hi, I'm Sara

🔹 اینجا this به person اشاره می‌کنه.

3️⃣ فراخوانی به عنوان یک Function (Global Invocation)

اگر تابع بدون شیء صدا زده بشه، در حالت عادی this به window (یا globalThis) اشاره می‌کنه:

function showThis() { console.log(this); } showThis(); // در مرورگر → Window

4️⃣ فراخوانی با Constructor (new)

اگر تابع رو با new فراخوانی کنیم → یک شیء جدید ساخته می‌شه.

function Person(name) { this.name = name; } const user = new Person("Reza"); console.log(user.name); // Reza

5️⃣ فراخوانی با call() و apply()

تابع‌ها متدهای داخلی call و apply دارن که اجازه می‌ده this و آرگومان‌ها رو کنترل کنیم.

function greet(age) { console.log("Hi " + this.name + ", age " + age); } const person = { name: "Ali" }; greet.call(person, 25); // Hi Ali, age 25 greet.apply(person, [30]); // Hi Ali, age 30

6️⃣ فراخوانی با bind()

با bind() یک نسخه جدید از تابع می‌سازیم که همیشه this مشخصی داره.

function greet() { console.log("Hello " + this.name); } const person = { name: "Neda" }; const boundGreet = greet.bind(person); boundGreet(); // Hello Neda

📌 جمع‌بندی Invocation Types

روش فراخوانیتوضیح
Direct CallmyFunc() – ساده‌ترین حالت
Method Callobj.myFunc() – this → obj
Global CallmyFunc() – this → window/globalThis
Constructor Callnew MyFunc() – ساخت شیء جدید
call/applyتغییر this + ارسال آرگومان‌ها
bindساخت یک نسخه جدید با this ثابت