Removing listener from inside outer function in JavaScript?

When working with event listeners in JavaScript, you might need to remove a listener from within an outer function. This is accomplished using removeEventListener() by passing the element reference and function reference to the outer function.

How It Works

The key is to pass both the element (this) and the function reference to the outer function, then use removeEventListener() to detach the listener.

Example

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Remove Event Listener Example</title>
</head>
<body>
    <button id="demo">Press Me</button>
    
    <script>
        var demoId = document.getElementById('demo');
        
        // Add event listener with named function reference
        demoId.addEventListener('click', function clickHandler() {
            outerFunction(this, clickHandler);
        }, false);
        
        function outerFunction(element, functionRef) {
            console.log('Outer function is called...');
            
            // Remove the event listener
            element.removeEventListener('click', functionRef, false);
            console.log('Listener has been removed...');
            console.log('Button can no longer be clicked!');
        }
    </script>
</body>
</html>

Output

When you click the button for the first time:

Outer function is called...
Listener has been removed...
Button can no longer be clicked!

Alternative Approach: Using Arrow Functions

You can also achieve this with arrow functions, but you need to store the function reference:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Arrow Function Example</title>
</head>
<body>
    <button id="arrowDemo">Click Once Only</button>
    
    <script>
        var button = document.getElementById('arrowDemo');
        
        // Store arrow function in a variable
        const handleClick = (event) => {
            console.log('Button clicked!');
            removeListener(event.target, handleClick);
        };
        
        button.addEventListener('click', handleClick);
        
        function removeListener(element, handler) {
            element.removeEventListener('click', handler);
            console.log('Event listener removed successfully');
        }
    </script>
</body>
</html>

Key Points

  • The function reference must be the same for both addEventListener() and removeEventListener()
  • Anonymous functions cannot be removed because there's no reference to them
  • Pass both the element and function reference to the outer function
  • The event listener is permanently removed after calling removeEventListener()

Conclusion

To remove an event listener from within an outer function, pass both the element reference and function reference as parameters. This pattern is useful for creating one-time event handlers or dynamically managing event listeners.

Updated on: 2026-03-15T23:19:00+05:30

135 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements