Functions are one of the fundamental building blocks in JavaScript. A
function in JavaScript is similar to a procedure—a set of statements
that performs a task or calculates a value, but for a procedure to
qualify as a function, it should take some input and return an output
where there is some obvious relationship between the input and the
output. To use a function, you must define it somewhere in the scope
from which you wish to call it.
A function definition (also called a function declaration, or function
statement) consists of the function keyword, followed by:
The name of the function.
A list of parameters to the function, enclosed in parentheses and
separated by commas.
The JavaScript statements that define the
function, enclosed in curly brackets, {...}.
For example, the
following code defines a simple function named square:
The function square takes one parameter, called number. The function consists of one statement that says to return the parameter of the function (that is, number) multiplied by itself.
Primitive parameters (such as a number) are passed to functions by value; the value is passed to the function, but if the function changes the value of the parameter, this change is not reflected globally or in the calling function. If you pass an object (i.e., a non-primitive value, such as Array or a user-defined object) as a parameter and the function changes the object's properties, that change is visible outside the function, as shown in the following example:
While the function declaration above is syntactically a statement, functions can also be created by a function expression. Such a function can be anonymous; it does not have to have a name.However, a name can be provided with a function expression. Providing a name allows the function to refer to itself, and also makes it easier to identify the function in a debugger's stack traces
Function expressions are convenient when passing a function as an argument to another function. The following example shows a map function that should receive a function as first argument and an array as second argument.
In the following code, the function receives a function defined by a function expression and executes it for every element of the array received as a second argument
Defining a function does not execute it. Defining it names the function
and specifies what to do when the function is called. Calling the
function actually performs the specified actions with the indicated
parameters. For example, if you define the function square.The preceding
statement calls the function with an argument of 5. The function
executes its statements and returns the value 25. Functions must be in
scope when they are called, but the function declaration can be hoisted
(appear below the call in the code).The scope of a function is the
function in which it is declared (or the entire program, if it is
declared at the top level).The arguments of a function are not limited
to strings and numbers. You can pass whole objects to a function. The
showProps() function (defined in Working with objects) is an example of
a function that takes an object as an argument. A function can call
itself. For example, here is a function that computes factorials
recursively
There are other ways to call functions. There are often cases where a
function needs to be called dynamically, or the number of arguments to a
function vary, or in which the context of the function call needs to be
set to a specific object determined at runtime. It turns out that
functions are themselves objects—and in turn, these objects have
methods. (See the Function object.) One of these, the apply() method,
can be used to achieve this goal.