


What is the difference between function declarations and function expressions?
Jul 15, 2025 am 02:28 AMFunction declarations and function expressions differ in hoisting and runtime behavior. 1. The function declaration will be completely promoted and can be called before definition; 2. The function expression only has the variable declaration, and the assignment is not promoted, and an error will be reported when calling in advance; 3. The name of the named function expression is only valid inside the function; 4. When using function declaration, it is suitable for creating reusable functions that need to be called in advance. Function expressions are suitable for conditional assignment, argument transmission or creation of anonymous functions; 5. The arrow function is the abbreviation of function expressions, and there is no declaration form.
Function declarations and function expressions are both ways to define functions in JavaScript, but they behave differently, especially when it comes to hoisting and how they're evaluated at runtime.
Function Declarations Are Hoisted
A function declaration is straightforward:
function saysHello() { console.log('Hello'); }
This type of function is hoisted , which means you can call it before it's defined in the code. For example:
saysHello(); // This works! function saysHello() { console.log('Hello'); }
JavaScript moves the entire function declaration to the top of the current scope during the compilation phase, so the above works without errors.
Function Expressions Are Not Hoisted
A function expression looks like this:
const saysGoodbye = function() { console.log('Goodbye'); };
Here, the function is assigned to a variable. Since only the variable declaration (not its assignment) is hoisted, trying to call sayGoodbye()
before it's assigned will result in an error:
sayGoodbye(); // TypeError: sayGoodbye is not a function const saysGoodbye = function() { console.log('Goodbye'); };
In this case, sayGoodbye
exists due to hoisting, but it's still undefined
when we try to call it because the assignment hasn't happened yet.
Named vs. Anonymous Function Expressions
You can also give a name to a function expression, which is useful for debugging:
const greet = function saysHi() { console.log('Hi!'); }; greet(); // Works fine saysHi(); // ReferenceError: sayHi is not defined
Even though the function has a name ( sayHi
), that name is only accessible inside the function itself — not outside. So from the outside, you still refer to it by the variable name ( greet
).
When to Use Which?
- Use function declarations when you want to create reusable functions that can be called anywhere in your scope, even before their definition.
- Use function expressions when:
- You need to assign a function conditionally
- Pass a function as an argument to another function
- Create anonymous or named inline functions
Also, with ES6 arrow functions, function expressions became more concise:
const multiply = (a, b) => a * b;
Arrow functions are always function expressions — there's no such thing as an arrow function declaration.
So depending on whether or not you need hoisting and how you plan to use the function, you'll choose between a declaration and an expression.
Basically that's it.
The above is the detailed content of What is the difference between function declarations and function expressions?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Default parameters in C++ provide the ability to specify default values ??for function parameters, thereby enhancing code readability, simplicity, and flexibility. Declare default parameters: Add the "=" symbol after the parameter in the function declaration, followed by the default value. Usage: When the function is called, if optional parameters are not provided, the default values ??will be used. Practical case: A function that calculates the sum of two numbers. One parameter is required and the other is optional and has a default value of 0. Advantages: Enhanced readability, increased flexibility, reduced boilerplate code. Note: It can only be specified in the declaration, it must be at the end, and the types must be compatible.

In C++, the order of function declarations and definitions affects the compilation and linking process. The most common is that the declaration comes first and the definition comes after; you can also use "forwarddeclaration" to place the definition before the declaration; if both exist at the same time, the compiler will ignore the declaration and only use the definition.

A function declaration informs the compiler of the existence of the function and does not contain the implementation, which is used for type checking. The function definition provides the actual implementation, including the function body. Key distinguishing features include: purpose, location, role. Understanding the differences is crucial to writing efficient and maintainable C++ code.

Function declaration and definition are necessary in C++. Function declaration specifies the return type, name and parameters of the function, while function definition contains the function body and implementation. First declare the function and then use it in your program passing the required parameters. Use the return statement to return a value from a function.
![[[nodiscard]] in C++ function declarations: Demystifying the consequences of ignoring return values](https://img.php.cn/upload/article/000/465/014/171455868319393.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
The [[nodiscard]] attribute indicates that the return value of the function must not be ignored, otherwise it will cause a compiler warning or error to prevent the following consequences: uninitialized exceptions, memory leaks, and incorrect calculation results.

C++ compilation error: function call does not match function declaration, how to solve it? When developing C++ programs, you will inevitably encounter some compilation errors. One of the common errors is that the function call does not match the function declaration. This kind of error widely exists among C++ programmers. Due to not paying attention to the correctness of function declaration, it leads to compilation problems, which ultimately wastes time and energy to fix the problem and affects development efficiency. Ways to avoid this mistake require following some norms and standard practices, let’s take a look at them below. What is a function call versus a function declaration?

The C++ function declaration syntax is: returnTypefunctionName(parameterType1parameterName1,...,parameterTypeNparameterNameN);, where returnType is the return type, functionName is the function name, parameterType is the parameter type, and parameterName is the parameter name, which must end with a semicolon.

A function declaration tells the compiler that a function exists without providing a function body. The steps are as follows: specify the function return type (void if there is no return value) define the function name and declare the function parameters (optional, including data type and identifier) ??plus semicolon
