تفاوت functionarrow
تفاوتهای کلیدی بین Function معمولی و Arrow Function در جاوااسکریپت
در جاوااسکریپت، دو روش اصلی برای تعریف توابع وجود دارد: Function معمولی و Arrow Function. هر کدام ویژگیهای منحصر به فردی دارند که در موقعیتهای مختلف مفید هستند. در این مقاله به بررسی تفاوتهای این دو روش میپردازیم.
1. نحوه تعریف و سینتکس
اولین تفاوت آشکار در نحوه نوشتن این توابع است:
- Function معمولی: function myFunc() { ... }
- Arrow Function: const myFunc = () => { ... }
Arrow Functionها مختصرتر هستند، به خصوص وقتی بدنه تابع یک خطی باشد:
const square = x => x * x; // بدون نیاز به return و آکولاد
2. رفتار this
مهمترین تفاوت در رفتار this است:
نوع تابع | رفتار this |
---|---|
Function معمولی | مقدار this به شیء فراخوانیکننده بستگی دارد |
Arrow Function | this از محیط بیرونی (lexical scope) به ارث میبرد |
برای درک بهتر مفهوم Hoisting در جاوااسکریپت که به توابع معمولی مربوط میشود، میتوانید کلیک کنید.
3. استفاده به عنوان Constructor
توابع معمولی میتوانند به عنوان constructor استفاده شوند:
function Person(name) {
this.name = name;
}
const john = new Person('John');
اما Arrow Functionها نمیتوانند با new فراخوانی شوند و خطا میدهند.
4. arguments و super
توابع معمولی به شیء arguments دسترسی دارند، اما Arrow Functionها این ویژگی را ندارند:
- در Arrow Functionها باید از پارامترهای rest استفاده کرد
- Arrow Functionها نمیتوانند super را در کلاسها به کار ببرند
جمعبندی و انتخاب بین دو روش
در انتخاب بین این دو نوع تابع باید به موارد زیر توجه کرد:
از Arrow Function استفاده کنید وقتی:
- به lexical this نیاز دارید
- توابع کوتاه و یک خطی دارید
- در callbackها استفاده میکنید
از Function معمولی استفاده کنید وقتی:
- به constructor نیاز دارید
- به arguments یا super دسترسی نیاز است
- توابعی دارید که به مقدار this پویا نیاز دارند
درک این تفاوتها به شما کمک میکند کدهای بهینهتر و خواناتری بنویسید و از خطاهای رایج در کار با this جلوگیری کنید.