What is the difference between void, eval, and the Function constructor in JavaScript?

JavaScript provides three distinct features for executing and manipulating code: void, eval(), and the Function constructor. Each serves different purposes and has unique characteristics.

The void Operator

The void operator evaluates an expression and always returns undefined. It's commonly used to prevent unwanted return values or create undefined values explicitly.

Syntax

void expression
void(expression)

Example

<html>
<body>
    <script>
        // Basic void usage
        console.log(void 0);           // undefined
        console.log(void "hello");     // undefined
        console.log(void (2 + 3));     // undefined
        
        // Common use in links
        function showAlert() {
            alert("Button clicked!");
        }
        
        // Preventing page navigation
        document.write('<a href="javascript:void(0)" onclick="showAlert()">Click me</a>');
    </script>
</body>
</html>
undefined
undefined
undefined

The eval() Function

The eval() function executes JavaScript code represented as a string. It runs in the current execution context but poses security risks and performance issues.

Example

<html>
<body>
    <script>
        var a = 30;
        var b = 12;
        var res1 = eval("a * b");
        var res2 = eval("5 + 10");
        var res3 = eval("Math.max(15, 25, 35)");
        
        document.write("Result 1: " + res1 + "<br>");
        document.write("Result 2: " + res2 + "<br>");
        document.write("Result 3: " + res3 + "<br>");
    </script>
</body>
</html>
Result 1: 360
Result 2: 15
Result 3: 35

Function Constructor

The Function constructor creates new function objects dynamically. Unlike eval(), it always runs in global scope and creates reusable functions.

Syntax

new Function([arg1, arg2, ...], functionBody)

Example

<html>
<body>
    <script>
        // Create functions dynamically
        var multiply = new Function('a', 'b', 'return a * b');
        var greet = new Function('name', 'return "Hello, " + name + "!"');
        var calculate = new Function('x', 'y', 'z', 'return x * y * z');
        
        document.write("Multiply: " + multiply(6, 7) + "<br>");
        document.write("Greet: " + greet("John") + "<br>");
        document.write("Calculate: " + calculate(5, 2, 9) + "<br>");
    </script>
</body>
</html>
Multiply: 42
Greet: Hello, John!
Calculate: 90

Key Differences

Feature void eval() Function Constructor
Purpose Returns undefined Executes string code Creates functions
Return Value Always undefined Result of executed code Function object
Scope Current scope Current scope Global scope
Security Risk None High Medium
Performance Fast Slow Moderate

Best Practices

Use void for creating undefined values or preventing return values. Avoid eval() due to security and performance concerns. Consider the Function constructor only when you need to create functions dynamically from strings.

Conclusion

While all three features involve code execution or manipulation, they serve distinct purposes: void ensures undefined return values, eval() executes string-based code, and the Function constructor creates reusable function objects dynamically.

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

447 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements