When you should not use JavaScript Arrow Functions?

Arrow functions should not be used in certain scenarios because they don't have their own this binding. Instead, they inherit this from the enclosing lexical scope, which can lead to unexpected behavior.

When NOT to Use Arrow Functions

Object Methods

Arrow functions should not be used as object methods because they don't bind this to the object. Instead, this refers to the global scope (window in browsers).

<!DOCTYPE html>
<html>
<head>
    <title>Arrow Functions - Object Methods</title>
</head>
<body>
    <h2>Arrow Function vs Regular Function in Objects</h2>
    <div id="result"></div>
    
    <script>
        const objArrow = {
            name: 'Arrow Object',
            value: 42,
            // Arrow function - WRONG approach
            showValueArrow: () => {
                return `Value: ${this.value}`;
            }
        };

        const objRegular = {
            name: 'Regular Object',
            value: 42,
            // Regular function - CORRECT approach
            showValueRegular: function() {
                return `Value: ${this.value}`;
            }
        };

        document.getElementById('result').innerHTML = 
            `<p>Arrow function result: ${objArrow.showValueArrow()}</p>` +
            `<p>Regular function result: ${objRegular.showValueRegular()}</p>`;
    </script>
</body>
</html>

Output

Arrow function result: Value: undefined
Regular function result: Value: 42

Constructor Functions

Arrow functions cannot be used as constructors because they don't have their own this binding and cannot be called with new.

<!DOCTYPE html>
<html>
<body>
    <div id="constructor-demo"></div>
    
    <script>
        // Arrow function - Cannot be used as constructor
        const ArrowPerson = (name) => {
            this.name = name;
        };

        // Regular function - Can be used as constructor
        function RegularPerson(name) {
            this.name = name;
        }

        try {
            // This will throw an error
            const person1 = new ArrowPerson('John');
        } catch (error) {
            document.getElementById('constructor-demo').innerHTML = 
                `<p>Error with arrow function: ${error.message}</p>`;
        }

        // This works fine
        const person2 = new RegularPerson('Jane');
        document.getElementById('constructor-demo').innerHTML += 
            `<p>Regular constructor works: ${person2.name}</p>`;
    </script>
</body>
</html>

Event Handlers (When You Need 'this')

When handling DOM events where you need this to refer to the element, avoid arrow functions.

<!DOCTYPE html>
<html>
<body>
    <button id="btn1">Button 1 (Arrow Function)</button>
    <button id="btn2">Button 2 (Regular Function)</button>
    <div id="event-result"></div>
    
    <script>
        // Arrow function - 'this' doesn't refer to the button
        document.getElementById('btn1').addEventListener('click', () => {
            document.getElementById('event-result').innerHTML = 
                `<p>Arrow: this.id = ${this.id} (undefined)</p>`;
        });

        // Regular function - 'this' refers to the button
        document.getElementById('btn2').addEventListener('click', function() {
            document.getElementById('event-result').innerHTML += 
                `<p>Regular: this.id = ${this.id} (btn2)</p>`;
        });
    </script>
</body>
</html>

Comparison Table

Scenario Arrow Function Regular Function Recommendation
Object Methods ? No own this ? Binds to object Use Regular
Constructors ? Cannot use new ? Works with new Use Regular
Event Handlers ? this = window ? this = element Use Regular (if you need this)
Callbacks ? Preserves outer this ? Creates new this Use Arrow

Conclusion

Avoid arrow functions for object methods, constructors, and event handlers where you need this to refer to the specific context. Use regular functions in these scenarios to maintain proper this binding.

Updated on: 2026-03-15T23:18:59+05:30

218 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements