چند وقت پیش میخواستم مطلبی در مورد تفاوت دو تابع `call` و `apply` توی جاوااسکریپت بنویسم که پشت کوهی از اتفاقات به جان سپرد، ولی امروز یک توییت دیدم که باعث شد دوباره این مطلب زنده بشه

`call` و `apply` دو تابعی هستند که به کمک آن میتوانید توابع دیگر را درون `scope` متفاوت از اسکپ حاضر فراخوانی کنید و تنها یک تفاوت دارند، در هنگام استفاده از `call` ورودی های تابعی که قصد فراخوانی آن را داریم را می‌باید با ویرگول از هم جدا کرده و بعنوان وردی‌های تابع `call` بنویسیم. مثل `func.call(scope, arg1, arg2, arg3)`. ولی در `apply` این ورودی‌ها همه باهم و بصورت یک آرایه به تابع ارسال می‌شوند، مثل `func.apply(scope, [arg1, arg2, arg3])`. خب بدیهی است زمانی که تعداد آرگمان‌های ارسالی برای تابع `func` مشخص نبوده و متغیر باشد نمیتوان از `call` استفاده کرد و راحتتر است که از `apply` استفاده کنیم.

```

var person1 = {age: 42};
var person2 = {age: 30};
function theFunction(name, profession) {
alert("My name is " + name + " and I am " + this.age + " year " + profession + ".");
}
theFunction("John", "fireman");
theFunction.apply(person1, ["Susan", "school teacher"]);
theFunction.call(person2, "Claude", "mathematician");