Home >Web Front-end >JS Tutorial >What Does the Exclamation Mark Do in JavaScript Function Expressions?
The Enigmatic Exclamation Mark in JavaScript Function Expressions
In the realm of JavaScript code, you may have encountered a curious sight: an exclamation mark preceding a function declaration. This seemingly不起眼的符号 holds a profound significance that alters the very nature of the function.
The exclamation mark, !, transforms a function declaration into a function expression. This means the function is now treated as a value that can be assigned to a variable, passed as an argument, or even returned from another function.
To understand the implication, consider the following code:
function foo() {}
This is a standard function declaration, which merely defines the function but does not invoke it. To actually execute the function, you would call it like this:
foo()
Now, let's introduce the exclamation mark:
!function foo() {}();
This seemingly harmless addition changes the ball game. The exclamation mark turns the function declaration into an expression, which can now be immediately invoked by appending parentheses. The precedence of parentheses is higher than that of the exclamation mark, so the code executes as:
(function foo() {})()
This essentially accomplishes the same task as the explicit invocation in the previous example. However, it offers a subtle advantage: it saves a byte per function expression.
Furthermore, the exclamation mark also serves another purpose. It forces the expression to return a boolean value based on the return value of the function. However, in the case of immediately invoked function expressions (IIFEs), the return value is typically undefined, making the result of the expression true. This boolean value is not typically used, but it is nonetheless a curious side effect of the exclamation mark's presence.
The above is the detailed content of What Does the Exclamation Mark Do in JavaScript Function Expressions?. For more information, please follow other related articles on the PHP Chinese website!