# Functions
# Function Declaration
# A) Function Statement
A function statement has a name. The declaration consists of:
- The function keyword
- The name of the function, or its identifier, followed by parentheses.
- A function body,enclosed in the function’s curly brackets { }
function greetWorld() {
console.log('Hello, World!');
}
greetWorld(); // -> calling the Function
# B) Function Expressions - Anonymus
- Another way to define a function - (anonymous function)
- name is usually omitted
- often stored in a variable in order to refer to it.
- it is common practice to use const as the keyword to declare the variable
- Unlike function declarations, function expressions are not hoisted so they cannot be called before they are defined.
const rectangleArea = function (width, height) {
let area = width * height;
return area;
}
# C) Arrow Functions
- ES6 introduced.
- removes the need to type out the keyword
function
- Instead, you first include the parameters inside the ( ) and then add an arrow => that points to the function body surrounded in { } like this:
const rectangleArea = (width, height) => {
let area = width * height;
return area;
};
# D) Concise Body Arrow Functions
The most condensed form to refactor arrow function syntax is concise body.
Functions that take only a single parameter do not need parentheses. If a function takes zero or multiple parameters, parentheses are required.
// ZERO PARAMETERS const functionName = () => {...}; // ONE PARAMETER const functionName = paramOne => {...}; // TWO OR MORE PARAMETERS const functionName = (paramOne, paramTwo) => {...};
function body composed of a single-line block does not need curly braces. Whatever that line evaluates will be automatically returned. The contents of the block should immediately follow the arrow => and the return keyword can be removed. This is referred to as implicit return.
// SINGLE-LINE BLOCK const sumNumbers = number => number + number; // MULTI-LINE BLOCK const sumNumbers = number => { return number + number; }
Examples:
const dayIsWednesday = day => day === 'Wednesday' ? true : false;
const circleArea = radius => Math.PI * radius * radius;
const doubler = item => item * 2;
const multiplier = (item, multi) => item * multi;
multiplier(5, 3); // returns 15
# Parameters & Arguments
Parameters allow functions to accept input(s) and perform a task using the input(s)
Arguments are the values that are passed to the function when it is called.
Functions should not be used for input/output -> recieves parameter - returns output
Function should be as simple as possible (ONE task)
# Hoisting
allows access to function declarations before they’re defined. Hoisting is NOT considered good practice
console.log(greetWorld()); // Output: Hello, World!
function greetWorld() {
console.log('Hello, World!');
}
# Default Parameters
To have a default/fallback value if no argument passed or if the argument is undefined.
function greeting (name = 'stranger') {
console.log(`Hello, ${name}!`)
}
greeting('Nick') // Output: Hello, Nick!
greeting() // Output: Hello, stranger!
Old Syntax:
name = name || "Default Value"
//But 0 is also undefined -> new Syntax is better!!
# Return
- Return keyword followed by the value
- By default that resulting value is
undefined
. - When a return statement is used in a function body, the execution of the function is stopped and the code that follows it will not be executed.
function rectangleArea(width, height) {
if (width < 0 || height < 0) {
return 'You need positive integers to calculate area!';
}
return width * height;
}
# Returning Boolean Values from Functions:
if (a === b) { return true } else { return false };
// can be simplified as:
return a === b;