WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

JavaScript · Intermediate · question 39 of 100

What are higher-order functions, and why are they useful in JavaScript?

📕 Buy this interview preparation book: 100 JavaScript questions & answers — PDF + EPUB for $5

Higher-order functions are functions that either take other functions as arguments or return a function as a result. They are a powerful feature of JavaScript that enable functional programming patterns and provide a way to write more concise, reusable, and flexible code.

Here are some examples of higher-order functions in JavaScript:

Callback functions: A callback function is a function that is passed as an argument to another function and is invoked inside that function. This pattern is commonly used for asynchronous operations, such as making a network request.

    function fetchData(url, callback) {
        fetch(url)
        .then(response => response.json())
        .then(data => callback(data))
        .catch(error => console.log(error));
    }
    
    fetchData("https://jsonplaceholder.typicode.com/todos/1", function(data) {
        console.log(data);
    });

In this example, the fetchData function takes a URL and a callback function as arguments. It makes a network request using the fetch API, parses the response as JSON, and then invokes the callback function with the parsed data.

Higher-order functions as factories: A factory function is a function that returns another function. This pattern is commonly used to create functions with specific behaviors or configurations.

    function createMultiplier(factor) {
        return function(number) {
            return number * factor;
        }
    }
    
    const double = createMultiplier(2);
    const triple = createMultiplier(3);
    
    console.log(double(5)); // 10
    console.log(triple(5)); // 15

In this example, the createMultiplier function is a higher-order function that returns a function that multiplies its argument by a factor. We can use this function to create other functions, such as double and triple, that multiply their arguments by 2 and 3, respectively.

Higher-order functions as decorators: A decorator function is a function that wraps another function to add additional functionality. This pattern is commonly used to add logging, error handling, or caching to a function.

    function withLogging(func) {
        return function(...args) {
            console.log(`Calling ${func.name} with arguments: ${args}`);
            const result = func(...args);
            console.log(`Returned value: ${result}`);
            return result;
        }
    }
    
    function add(a, b) {
        return a + b;
    }
    
    const addWithLogging = withLogging(add);
    
    console.log(addWithLogging(2, 3)); // Calling add with arguments: 2,3
    // Returned value: 5
    // 5

In this example, the withLogging function is a higher-order function that takes a function as an argument and returns a new function that logs the function name, arguments, and return value. We can use this function to create a new function addWithLogging that logs the behavior of the original add function.

In summary, higher-order functions are useful in JavaScript because they enable functional programming patterns, provide a way to write more concise and flexible code, and enable powerful features such as callbacks, factories, and decorators.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic JavaScript interview — then scores it.
📞 Practice JavaScript — free 15 min
📕 Buy this interview preparation book: 100 JavaScript questions & answers — PDF + EPUB for $5

All 100 JavaScript questions · All topics