What We Will Learn?
- What Is Function
- Terminologies
- Different Types of Functions
- Function Declarations
- Function Executions
- Parameter
- Call Stack
- Nested Functions
- Functions Scope
- Closure
- Callback Function
- Higher Order Function
- Pure Function
- IIFE
- Recursion
đ§âđģ āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ function
āĻā§?
function
āĻšāϞ⧠āĻāĻāĻāĻŋ āĻā§āĻĄ āĻŦā§āϞāĻ āϝāĻž āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§āĻŽāϏāĻŽā§āĻĒāĻžāĻĻāύ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤ function
āĻāĻāĻŦāĻžāϰ define āĻāϰāĻž āĻšāϞ⧠āĻŦāĻžāϰ āĻŦāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤ āĻāϤ⧠āĻā§āĻĄ āĻĒā§āύāϰāĻžāĻŦā§āϤā§āϤāĻŋ āĻšā§āϰāĻžāϏ āĻĒāĻžāĻāĨ¤
đ§âđģ Functions Terminologies:
đ Defining functions (function āϤā§āϰ⧠āĻāϰāĻž):
a. Function Declarations:
āϝāĻāύ āĻāĻāĻāĻŋ function
āĻā§ keyword
- function
, function
āĻāϰ āĻāĻāĻāĻŋ āύāĻžāĻŽ, āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ parameter
āĻāĻŦāĻ statement
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϤā§āϰ⧠āĻāϰāĻž āĻšā§ āϤāĻā§ function declaration
āĻŦāϞā§āĨ¤ function declaration
, function statement
āύāĻžāĻŽā§ āĻ āĻĒāϰāĻŋāĻāĻŋāϤāĨ¤
statement āĻšāϞ⧠function āĻāϰ āĻāĻŋāϤāϰ {// do this task} code āĻŦā§āϞāĻāĨ¤ return
āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ function
āĻĨā§āĻā§ āĻāĻžāĻā§āĻā§āώāĻŋāϤ āĻĢāϞāĻžāĻĢāϞ, function
āϝā§āĻāĻžāύ⧠call/invoke
āĻāϰāĻž āĻšā§, āϏā§āĻāĻžāύ⧠āĻĒā§āϰā§āϰāĻŖ āĻāϰāĻž āĻšā§āĨ¤
function functionName (parameter1, parameter2) {
return parameter1 + parameter2;
}
functionName(4, 2); // Output: 6
function name
āϝā§āĻā§āύ āĻāĻŋāĻā§ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϤāĻŦā§ function call/invoke
āĻāϰāĻžāϰ āϏāĻŽā§ āĻšā§āĻŦāĻšā§ function name āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšā§āĨ¤ āύāĻžāĻŽā§āϰ āĻļā§āώ⧠āĻ
āĻŦāĻļā§āϝāĻ ()
āĻŦāĻž parentheses
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
function parameters āĻšāϞ⧠function name āĻāϰ āĻĒāϰ parentheses āĻāϰ āĻāĻŋāϤāϰ variableāĨ¤ āĻāĻāĻžāϧāĻŋāĻ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰā§āϰ āĻāύā§āϝ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰā§āϰ āĻŽāĻžāĻā§ (,) āĻāĻŽāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšā§āĨ¤
parameters
arguments value receive **āĻāϰā§āĨ¤
function
āĻĨā§āĻā§ āϝ⧠āĻĢāϞāĻžāĻĢāϞ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻž āĻāϰāĻž āĻšā§ āϤāĻž return
āĻā§āĻā§āĻžāϰā§āĻĄā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϝā§āĻāĻžāύ⧠function
call āĻāϰāĻž āĻšā§, āϏā§āĻāĻžāύ⧠āĻĒāĻžāϏ āĻāϰāĻž āĻšā§āĨ¤ return
āĻāϰ āĻĢāϞ⧠function
āĻāϰ āĻāĻžāĻ āĻļā§āώ āĻšā§āĨ¤ āĻ
āϰā§āĻĨāĻžā§ return
āĻāϰ āĻĒāϰ function
āĻāϰ āĻā§āύ⧠āĻā§āĻĄ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻ āĻāϰ⧠āύāĻžāĨ¤
function
call/invoke
āĻāϰāĻžāϰ āϏāĻŽā§ ()
- āĻāϰ āĻāĻŋāϤāϰ āϝ⧠value āĻĒā§āϰāĻĻāĻžāύ āĻāϰāĻž āĻšā§ āϤāĻžāĻā§ arguments
āĻŦāϞā§āĨ¤
b. Function Expression:
function āĻā§ function name āĻāĻžā§āĻž declare āĻāϰāĻžāĻā§ function expression
āĻŦāϞā§āĨ¤ Function Expression, anonymous function
āύāĻžāĻŽā§āĻ āĻĒāϰāĻŋāĻāĻŋāϤāĨ¤
const functionExpressionfunction = function (num) {
return num +1;
}
functionExpressionfunction(5); // Output: 6
NB: Function Declaration āĻāĻŦāĻ Function Definition āĻāϰ āĻŽāϧā§āϝ⧠āĻŽā§āϞāĻŋāĻ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻĨāĻžāĻāϞā§āĻ āϏāĻžāϧāĻžāϰāĻŖ āĻ āϰā§āĻĨā§ function create āĻāϰāĻžāĻā§ āĻŦā§āĻāĻžā§āĨ¤
đ§âđģ Function VS Method (function āĻ Method āĻāϰ āĻŽāϧā§āϝ⧠āĻĒāĻžāϰā§āĻĨāĻā§āϝ):
a. Function:
Function āĻšāϞ⧠āĻāĻāĻāĻŋ āϏā§āĻŦāĻžāϧā§āύ code block āϝāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻžāϰā§āϝ-āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ function āĻā§ code āĻāϰ āϝā§āĻā§āύ āĻāĻžā§āĻāĻž āĻĨā§āĻā§ call
āĻāϰ⧠āĻāύāĻĒā§āĻ āĻĨā§āĻā§ āĻ
āĻāĻāĻĒā§āĻ āĻĒāĻžāĻā§āĻž āϝāĻžā§āĨ¤
function greet(name) {
return `Hello, ${name}!`;
}
console.log(greet("Rabiul")); // Output: Hello, Rabiul!
b. Methods:
Method
āĻ āĻāĻāĻāĻŋ function
āϤāĻŦā§ āĻāĻāĻŋ object
āĻā§ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰā§, object
āĻāϰ property
āĻšāĻŋāϏā§āĻŦā§ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§āĨ¤ āĻ
āϰā§āĻĨāĻžā§ Method āϏāĻŦ āϏāĻŽā§ object āĻāϰ property āĻšāĻŋāϏā§āĻŦā§ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāĻŦā§āĨ¤
const user = {
firstName: "Khan",
middleName: "Rabiul",
lastName: "Islam",
fullName : function () {
return `${this.firstName} ${this.middleName} ${this.lastName}`
}
}
console.log(user.fullName());
đ§âđģ Parameter:
đ a. Default Parameter:
JavaScript Function, parameter
āĻāϰ value undefined
āĻĨāĻžāĻā§āĨ¤ undefined
āĻā§āϞā§āϰ āϏāĻžāĻĨā§ āĻ
āĻĒāϰā§āĻļāύ āĻāϰāĻž āϏāĻŽā§āĻāĻŦ āύā§āĨ¤ āĻāĻŦāĻžāϰ āĻāĻŋāĻā§ āĻā§āώā§āϤā§āϰ⧠āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰā§āϰ āĻā§āϝā§āϞ⧠āϏā§āĻ āĻāϰāĻžāϰ āĻĒā§āϰā§ā§āĻāύ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϏ⧠āϏāĻŦ āĻā§āώā§āϤā§āϰ⧠default parameter
āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤
function multiple (num1, num2 =1) {
return num1 * num2;
}
multiple(5); // Output: 5 * 1 = 5
multiple(5, 2); // Output: 5 * 2 = 10
Parameters āĻāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ value (=value) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϝāϤāĻā§āϞ⧠default parameter āĻĒā§āϰā§ā§āĻāύ āϤāϤā§āĻā§āϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤
đ b. Rest Parameter:
JavaScript rest parameter āĻ
āϏāĻāĻā§āϝ argument āĻā§ array āĻāĻāĻžāϰ⧠receive āĻāϰā§āĨ¤ rest parameter āĻŽā§āϞāϤ (âĻāύāĻžāĻŽ) āĻĻā§āĻŦāĻžāϰāĻž āĻāĻ āĻŋāϤāĨ¤
function sum (num1, num2, ...rest) {
const restSum = rest.reduce((total, num) => total + num, 0)
return num1 + num2 + restSum;
}
sum(4,5,6,7,8,10,12);
Rest parameter
āĻāϰ āĻāĻŋāĻā§ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻŦāĻŋāώā§āĻ
āĻĒā§āϰā§āĻŦā§ āĻāĻŽāĻžāϰāĻž Function Declaration āĻ Function Expression āύāĻŋā§ā§ āĻāϞā§āĻāύāĻž āĻāϰā§āĻāĻŋāĨ¤ āĻāĻāĻžāύ⧠āĻļā§āϧ⧠Arrow Function āύāĻŋā§ā§ āĻāϞā§āĻāύāĻž āĻāϰāĻž āĻšāĻŦā§āĨ¤
- āĻāĻāĻāĻŋ
function
āĻ āĻāĻāĻāĻŋāĻŽāĻžāϤā§āϰrest
āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤ -
rest
āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āϏāĻŦparameter
āĻāϰ āĻļā§āώ⧠āĻšāĻŦā§āĨ¤ -
rest
āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻāϰ āĻā§āύdefault value
āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰāĻŦā§ āύāĻžāĨ¤
đ§âđģ āĻŦāĻŋāĻāĻŋāύā§āύ āĻĒā§āϰāĻāĻžāϰā§āϰ Functions:
āĻĒā§āϰā§āĻŦā§ āĻāĻŽāĻžāϰāĻž Function Declaration āĻ Function Expression āύāĻŋā§ā§ āĻāϞā§āĻāύāĻž āĻāϰā§āĻāĻŋāĨ¤ āĻāĻāĻžāύ⧠āĻļā§āϧ⧠Arrow Function
āύāĻŋā§ā§ āĻāϞā§āĻāύāĻž āĻāϰāĻž āĻšāĻŦā§āĨ¤
đ Arrow Function:
Function āĻā§ āϏāĻāĻā§āώāĻŋāĻĒā§āϤ āĻāĻāĻžāϰ⧠āϞā§āĻāĻžāϰ āĻāύā§āϝ arrow function āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤
Syntax:
() => expression
param => expression
(param) => expression
(param1, parameter2) => expression
() => {
statements
}
param => {
statements
}
(param1, paramN) => {
statements
}
āĻāĻĻāĻžāĻšāϰāĻŖāĻ
const sum = (a, b) => {
return a + b;
};
console.log(sum(5, 10)); // āĻāĻāĻāĻĒā§āĻ: 15
const sum = (a, b) => a + b;
console.log(sum(5, 10)); // āĻāĻāĻāĻĒā§āĻ: 15
const square = x => x * x;
console.log(square(5)); // āĻāĻāĻāĻĒā§āĻ: 25
āĻāĻāĻāĻŋ parameter āĻāϰ āĻāύā§āϝ (), āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻĒā§āϰā§āĻāύ āύā§āĻāĨ¤ āĻāĻŦāĻžāϰ āĻāĻāĻāĻŋ expression āĻāϰ āĻāύā§āϝ, {} āĻāĻŦāĻ return keyword āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āϰāĻŋ āύā§āĨ¤
đ§âđģ Nested Function:
āĻāĻāĻāĻŋ function-āĻā§ āϝāĻāύ āĻ
āύā§āϝ āĻāĻāĻāĻŋ function āĻāϰ āĻŽāϧā§āϝ⧠define āĻāϰāĻž āĻšā§, āϤāĻāύ āϤāĻžāĻā§ Nested Function āĻŦāϞā§āĨ¤
function outerFunction () {
console.log('outer funciton');
function inner () {
console.log('Inner function');
}
inner();
}
console.log( outerFunction());
// Output: outer funciton
// Inner function
āĻĒā§āϰā§ā§āĻāύ⧠āĻāĻŽāĻžāϰāĻž āĻāĻāĻžāϧāĻŋāĻ nested function āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
đ§âđģ Function Scope:
function scope āĻāĻŽāύ āĻāĻāĻāĻŋ āϧāĻžāϰāĻŖāĻž āϝā§āĻāĻžāύ⧠function āĻāϰ āĻāĻŋāϤāϰā§āϰ variable āĻā§āϞā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ access āĻ function āĻāϰ āĻŽāϧā§āϝā§āĻ āϏā§āĻŽāĻžāĻŦāĻĻā§āϧāĨ¤ āĻ
āϰā§āĻĨāĻžā§ function āĻāϰ āĻŦāĻžāĻāϰ⧠variable āĻā§āϞā§āϰ access āĻĒāĻžāĻā§āĻž āϝāĻžāĻŦā§āύāĻžāĨ¤
function outerFunction() {
const a = 10;
function innerFunction() {
const b = 5;
console.log(a); // Logs '10'
function corefunction() {
console.log(a); // Logs '10'
console.log(b); // Logs '5'
const c = 2;
return a + b + c; // Returns 10 + 5 + 2 = 17
}
return corefunction;
}
return innerFunction;
}
const inner = outerFunction(); // Returns innerFunction
const core = inner(); // Returns corefunction
console.log(core()); // Logs '10', '5', and '17'
console.log(a);
console.log(b);
console.log(c);
// Output: Uncaught ReferenceError: b is not defined
function āĻāϰ āĻŦāĻžāĻāϰ⧠variable access āĻāϰāϤ⧠āĻā§āϞ⧠ReferenceErro; āĻĻā§āĻāĻžāĻā§āĻā§ āĻā§āύāύāĻž variable, function āĻāϰ āĻāĻŋāϤāϰ define āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤
đ§âđģ Closures:
āĻā§ā§āĻāĻāĻŋ function
āĻāϰ āϏāĻŽāύā§āĻŦā§ā§ āĻāĻ āĻŋāϤ Lexical Environment, āϝāĻž āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰ⧠āĻāĻāĻāĻŋ function
āĻāϰ āĻŽāϧā§āϝ⧠variable
āĻ
āύā§āϝ function
āĻā§āϞ⧠access/āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻĒāĻžāĻŦā§ āĻāĻŋ āύāĻžāĨ¤ āĻ
āϰā§āĻĨāĻžā§, āϝāĻāύ āĻāĻāĻāĻŋ function
āĻ
āύā§āϝ function
āĻāϰ āĻāĻŋāϤāϰ āĻāĻ āĻŋāϤ āĻšā§, āϤāĻāύ āĻāĻŋāϤāϰā§āϰ function
āϤāĻžāϰ āĻŦāĻžāĻāϰā§āϰ function
āĻāϰ variable
āĻŽāύ⧠āϰāĻžāĻāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ access/āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāϧāĻžāϰāύāĻžāĻā§ āĻā§āϞā§āĻāĻžāϰ(closure) āĻŦāϞā§āĨ¤
function outerFunction () {
const outerVariable = 'This is outer variable value';
function innerFunction () {
console.log(outerVariable);
}
return innerFunction;
}
const closuer = outerFunction();
closuer();
// Output: This is outer variable value
āĻĒāĻžāĻļā§āϰ āĻā§āĻĄ āϏā§āύāĻŋāĻĒāĻŋāĻā§ outerFunction āĻāϰ āĻāĻŋāϤāϰ outerVariable āύāĻžāĻŽā§ āĻāĻāĻāĻŋ variable init āĻāĻŦāĻ assign āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤ āĻāĻāĻ āϏāĻžāĻĨā§ innerFunction āύāĻžāĻŽā§ āĻāĻāĻāĻŋ function declare āĻāϰ⧠āĻšā§ā§āĻā§āĨ¤ āĻāĻŦāĻžāϰ innerFunction āĻā§ console.log()/access āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤ āϝā§āĻšā§āϤ⧠Lexical Enviornment āĻ inner function āϤāĻžāϰ āĻŦāĻžāĻāϰā§āϰ function āĻāϰ variable āĻŽāύ⧠āϰāĻžāĻāϤ⧠āĻĒāĻžāϰā§, āϤāĻžāĻ āϝāĻāύ outerFunction āĻā§ call āĻāϰāĻž āĻšāϞ⧠āϤāĻāύ innerFunction āϤāĻžāϰ outer function āĻĨā§āĻā§ variable āĻāϰ value āĻā§āϰāĻšāύ āĻāϰāϤ⧠āĻĒā§āϰā§āĻā§āĨ¤
function outerFunction () {
const a = 10;
function innerFunction () {
const b = 5;
function hardCoreFunction () {
const c = 20;
return a + b + c;
}
return hardCoreFunction()
}
return innerFunction;
}
const closure = outerFunction();
console.log(closure())
āĻāĻĻāĻžāĻšāϰāĻŖ ⧍āĻ outerFunction Lexical Scope āĻāϰ āĻāĻŋāϤāϰ āĻāϰ⧠⧍āĻāĻŋ function declare āĻāϰāĻž āĻšā§ā§āĻā§ innerFunction āĻāĻŦāĻ hardCoreFunctionāĨ¤ outerFunction function āĻāϰ āĻāĻŋāϤāϰ a = 10 innerFunction āĻ b = 5 āĻāĻŦāĻ hardCoreFunction āĻāϰ āĻāĻŋāϤāϰ c = 20 āĻāĻŦāĻ variable a, b, c variable āĻāϰ āϏāĻŽāώā§āĻāĻŋ āύāĻŋāϰā§āĻŖā§ āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤ hardCoreFunction āĻāϰ āĻāĻŋāϤāϰ variable a āĻāĻŦāĻ b āύāĻž āĻĨāĻžāĻāĻžāϰ āĻĒāϰāĻ lexical enviornment āĻāϰ āĻāĻžāϰā§āύ⧠access āĻāϰāϤ⧠āĻĒāĻžāϰāĻā§āĨ¤
function outerFunction () {
const a = 10;
function innerFunction () {
const b = 5;
console.log(a);
console.log(c);
function hardCoreFunction () {
const c = 20;
return a + b + c;
}
return hardCoreFunction()
}
return innerFunction;
}
const closure = outerFunction();
console.log(closure())
āĻāϧāĻžāĻšāϰāĻŖ ā§ŠāĻ innerFunction āĻāϰ āĻāĻŋāϤāϰ variable a āĻāĻŦāĻ c āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āύā§āĨ¤ a āĻ c access āĻāϰāϤ⧠āĻā§āϞ⧠a āĻāϰ value āĻĒāĻžāĻā§āĻž output āĻĒāĻžāĻā§āĻž āĻā§āϞā§āĻ c variable āĻāϰ access āύāĻž āĻĨāĻžāĻāĻžā§, Output REferenceError show āĻāϰāĻā§āĨ¤ āĻŦā§āĻāĻžāϰāĻž āϏā§āĻŦāĻŋāϧāĻžāϰā§āϤ⧠outerFunction āĻā§ grand_parent, innerFunction āĻā§ parent āĻāĻŦāĻ hardCoreFunction child āĻšāĻŋāϏā§āĻŦā§ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰāĻž āĻšāϞā§āĨ¤ child āϤāĻžāϰ parent, grand_parent variable access āĻĒāĻžāĻāĨ¤ āĻāĻŽāύāĻāĻŋ child āϏāϰāĻžāϏāϰāĻŋ grand_parent āĻā§āĻ access āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤ āĻāĻŋāύā§āϤ⧠āĻā§āύ⧠parent āϤāĻžāϰ child āĻāϰ variable access āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§ āύāĻžāĨ¤
āϏāĻšāĻāĻāĻžāĻŦā§ āĻŦāϞāϤ⧠āĻā§āϞ⧠āĻā§āϞā§āĻāĻžāϰ(closure) āĻšāϞ⧠āϝāĻāύ inner function āϤāĻžāϰ Lexical Environment āĻ outer function āĻĨā§āĻā§ variable access āĻāϰā§āĨ¤
đ§âđģ Callbac Function:
Arguments āĻāĻāĻžāϰ⧠āĻāĻāĻāĻŋ function āĻā§ āĻ āύā§āϝ āĻāĻāĻāĻŋ function āĻ pass āĻāϰā§, āĻā§āύ āĻāĻžāϰā§āϝāϏāĻŽā§āĻĒāĻžāĻĻāύāĻā§ callback function āĻŦāϞā§āĨ¤ callback function āĻā§ function āĻāϰ āĻŽāϧā§āϝ⧠invoked/call āĻāϰā§āϤ⧠āĻšā§āĨ¤
synchronous āĻāĻŦāĻ asynchronous ⧍ āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠callback function āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§āĨ¤
function multiplyByTwo(num, callbackFunc) {
var result = num * 2;
callbackFunc(result);
}
function ConLogResult(result) {
console.log(result);
}
multiplyByTwo(5, ConLogResult);
đ§âđģ Higher Order Function:
āĻāĻāĻāĻŋ function, āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ function arguments āĻĨā§āĻā§ āĻā§āϰāĻšāĻŖ āĻāϰ⧠āĻ āĻĨāĻŦāĻž āĻĢāϞāĻžāĻĢāϞ āĻšāĻŋāϏā§āĻŦā§ function āĻā§ return āĻāϰā§, āϤāĻžāĻā§ Higher Order Function (HoF) āĻŦāϞā§āĨ¤
đ Higher Order Function āĻāϰ ⧍āĻāĻŋ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻ
Argument āĻ function āĻā§āϰāĻšāĻŖ āĻāϰā§āĨ¤
āĻĢāϞāĻžāĻĢāϞ āĻšāĻŋāϏā§āĻŦā§ function āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
1. Argument āĻ function āĻā§āϰāĻšāĻŖ āĻāϰā§:
function higherOrderFunction (callbackFun) {
callbackFun('It is a higher Order Function');
}
function callbackFun (message) {
console.log(message)
}
higherOrderFunction(callbackFun);
āĻāĻāĻžāύ⧠higherOrderFunction, call āĻāϰāĻžāϰ āϏāĻŽā§ argument āĻ āĻ āύā§āϝ āĻāĻāĻāĻŋ function pass āĻāϰāĻā§āĨ¤
āĻā§āĻĨāĻžā§ Higher Order Function āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĻ
const radius = [4,5,8];
// Calculating Area of the circle
const circleArea = function (radius) {
const result = []; // initialized arra to store output
for(let i = 0; i < radius.length; i++) {
result.push(Math.PI * (radius[i], radius[i]));
}
return result;
}
console.log(circleArea(radius));
// Output: [12.566370614359172, 15.707963267948966, 25.132741228718345]
const diameter = function (radius) {
const result = [];
for (let i = 0; i<radius.length; i++) {
result.push(2 * radius[i]);
}
return result;
}
console.log(diameter(radius));
// Output: [8, 10, 16]
āĻāĻā§ āĻā§āώā§āϤā§āϰ⧠āĻĻā§āĻāĻž āϝāĻžāĻā§āĻā§ radius variable āĻā§ access āĻāϰāĻā§āĨ¤ āĻāĻŋāύā§āϤ⧠function āĻāϰ operation āĻā§āϞ⧠āĻāĻŋāύā§āύāĨ¤ āĻāĻŽāύ āĻā§āώā§āϤā§āϰ⧠āĻāĻŋāύā§āύ operation āĻāϰ āĻāύā§āϝ āĻāĻŋāύā§āύ function āϤā§āϰ⧠āĻāϰā§, āĻ
āύā§āϝ āĻāĻāĻāĻŋ function āĻāϰ argument āĻ pass āĻāϰ⧠āĻāĻāĻāĻŋ āĻĒā§āύāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāϝā§āĻā§āϝ function/higher order function āĻāĻ āύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
const radius = [4,5,8];
// Calculating diameter
const diameter = function (radius) {
const result = [];
for (let i = 0; i<radius.length; i++) {
result.push(2 * radius[i]);
}
return result;
}
console.log(diameter(radius));
// Area clcultion's Operation
const area = function (radius) {
return Math.PI * radius * radius;
}
// Diameter clcultion's Operation
const diameter = function (radius) {
return 2 * radius;
}
// Making a function that can calculate area, diameter, and other oprations. It will be a resuable function
const calculate = function (radius, operation) {
const output = [];
for(i = 0; 0 < radius.length; i++) {
output.push(operation[i]);
}
return output;
}
console.log(calculate(radius,diameter));
console.log(calculate(radius,area));
āϧāĻžāĻĒ ā§§āĻ āĻāĻāĻāĻŋ function āϤā§āϰ⧠āĻāϰāĻŋ, āϝā§āĻāĻŋ āĻāĻāĻāĻŋ value āĻāĻŦāĻ āĻāĻāĻāĻŋ function āϰāĻŋāϏāĻŋāĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤
āϧāĻžāĻĒ ā§¨āĻ āĻĒā§āϰāϤā§āϝā§āĻāĻāĻŋ āĻāϞāĻžāĻĻāĻž operation āĻāϰ āĻāύā§āϝ āĻāĻŋāύā§āύ āĻāĻŋāύā§āύ function define āĻāϰāĻŋāĨ¤
āϧāĻžāĻĒ ā§ŠāĻ HoFs āĻā§ call āĻāϰāĻžāϰ āϏāĻŽā§ āĻĒā§āϰā§ā§āĻāύā§ā§ operation/function āĻā§ pass āĻāϰāĻŋāĨ¤ āĻāĻāĻžāύ⧠value = radius āĻāĻŦāĻ function/operaton = diameter/area;
āϧāĻžāĻĒ ā§ĒāĻ callback function āĻā§ function āĻāĻŋāϰ āĻāĻŋāϤāϰ call āĻāϰāĻŋāĨ¤ argument āĻ āĻĒā§āϰā§ā§āĻāύā§ā§ value pass āĻāϰāĻŋāĨ¤
āĻāĻāύ function/operation āĻāĻŋ āĻ āĻā§āĻŽā§āĻāĻŋāĻ āĻĒā§āϰāĻžāĻĒā§āϤ value āĻĨā§āĻā§ operation āϏāĻŽā§āĻĒāύā§āύ āĻāϰ⧠HoFs āĻāϰ āϝā§āĻāĻžāύ⧠call āĻāϰāĻž āĻšā§ā§āĻā§, āϏā§āĻāĻžāύ⧠āĻĒā§āϰāĻĻāĻžāύ āĻāϰāĻŦā§āĨ¤
đ ⧍. āĻĢāϞāĻžāĻĢāϞ āĻšāĻŋāϏā§āĻŦā§ function āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§(return a function):
Higher Order Function āĻĢāϞāĻžāĻĢāϞ āĻšāĻŋāϏā§āĻŦā§ āĻ
āύā§āϝ āĻāĻāĻāĻŋ function āĻāϰ return āĻĢāϞ āĻā§āϰāĻšāĻŖ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
function higherOrderFunction (a, b) {
function sum (b) {
return a + b;
}
return sum;
}
console.log( higherOrderFunction(4)(5));
// Output: 9
// Or
function higherOrderFunction (a, b) {
return function sum (b) {
return a + b;
}
}
console.log( higherOrderFunction(4)(5));
// Output: 9
āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ
- Array: map(), reduce(), filter(), sort()...
- Object: Object.entries()
- Custom
āĻāĻĻāĻžāĻšāϰāĻŖ ā§§āĻ
āĻāĻāĻāĻŋ array āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ number element āĻ⧠⧍ āĻĻā§āĻŦāĻžāϰāĻž āĻā§āĻŖ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
const users = [
{firstName: 'Khan', lastName: 'Rabiul', age: 30},
{firstName: 'Anisul', lastName: 'Islam', age: 20},
{firstName: 'Shahidul', lastName: 'Islam', age: 25},
{firstName: 'Mr.', lastName: 'Sabbir', age: 32},
{firstName: 'Sk.', lastName: 'Shamim', age: 37},
]
const usersFullName = users.map(user => user.firstName + ' ' + user.lastName);
console.log(usersFullName);
// Output: ['Khan Rabiul', 'Anisul Islam', 'Shahidul Islam', 'Mr. Sabbir', 'Sk. Shamim']
āĻāĻĻāĻžāĻšāϰāĻŖ ā§ŠāĻ
āĻāĻāĻāĻŋ array of object āĻĨā§āĻā§ age āĻāϰ āϏāĻŽāώā§āĻāĻŋ āĻŦā§āϰ āĻāϰāϤ⧠āĻšāĻŦā§;
const users = [
{firstName: 'Khan', lastName: 'Rabiul', age: 30},
{firstName: 'Anisul', lastName: 'Islam', age: 20},
{firstName: 'Shahidul', lastName: 'Islam', age: 25},
{firstName: 'Mr.', lastName: 'Sabbir', age: 32},
{firstName: 'Sk.', lastName: 'Shamim', age: 37},
]
const ageOver30 = users.filter(user => user.age > 30);
console.log(ageOver30);
//Output : {firstName: 'Mr.', lastName: 'Sabbir', age: 32},
// {firstName: 'Sk.', lastName: 'Shamim', age: 37},
āĻāĻĻāĻžāĻšāϰāĻŖ ā§ĢāĻ
āĻāĻāĻāĻŋ array of object āĻĨā§āĻā§ āϝāĻžāĻĻā§āϰ age āĻāϰ āĻā§āϰāĻŽāĻžāύā§āϏāĻžāϰ⧠āϞāĻŋāϏā§āĻ āĻŦā§āϰ āĻāϰāϤ⧠āĻšāĻŦā§;
const users = [
{firstName: 'Khan', lastName: 'Rabiul', age: 30},
{firstName: 'Anisul', lastName: 'Islam', age: 20},
{firstName: 'Shahidul', lastName: 'Islam', age: 25},
{firstName: 'Mr.', lastName: 'Sabbir', age: 32},
{firstName: 'Sk.', lastName: 'Shamim', age: 37},
]
const sortedByAge = users.sort((a, b) => a.age - b.age);
console.log(sortedByAge);
// Output:
// {firstName: 'Anisul', lastName: 'Islam', age: 20}
// {firstName: 'Shahidul', lastName: 'Islam', age: 25}
// {firstName: 'Khan', lastName: 'Rabiul', age: 30}
// {firstName: 'Mr.', lastName: 'Sabbir', age: 32}
// {firstName: 'Sk.', lastName: 'Shamim', age: 37}
āĻāĻĻāĻžāĻšāϰāĻŖ ā§ŦāĻ āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖ āĻā§āϞ⧠āϝāĻĻāĻŋāĻ āĻāĻŽāϰāĻž HoFs āĻāϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āϏāĻŽāĻžāϧāĻžāύ āĻāϰā§āĻāĻŋāĨ¤ āĻāĻāĻžāύ⧠āĻāĻāĻāĻŋ āĻŦāĻŋāώ⧠āϞāĻā§āώāĻŖā§ā§ āϝā§, āĻĒā§āϰāϤāĻŋ āĻā§āώā§āϤā§āϰ⧠āĻāĻŽāĻžāϰāĻž āĻāĻāĻ array of object input āĻ āĻā§āϰāĻšāĻŖ āĻāϰāĻāĻŋ āĻāϰ āĻāĻŋāύā§āύ operation āĻāĻžāϞāĻžāĻā§āĻāĻŋāĨ¤ āϝāĻĻāĻŋ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ function create āĻāϰāĻŋ, āϝā§āĻāĻžāύ⧠āĻāĻāĻāĻŋ input āĻāĻŦāĻ āĻāĻŋāύā§āύ operation āĻāϰ āĻāύā§āϝ āĻāĻŋāύā§āύ function callback āĻ āĻāύāĻĒā§āĻ āύāĻŋāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤ āϤāĻž āĻšāϞ⧠function āĻāĻŋ āĻĒā§āύāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āϝā§āĻā§āϝ āĻ āĻāϰ⧠āĻĄāĻžāĻāύāĻžāĻŽāĻŋāĻ āĻšāĻŦā§āĨ¤
const users = [
{firstName: 'Khan', lastName: 'Rabiul', age: 30},
{firstName: 'Anisul', lastName: 'Islam', age: 20},
{firstName: 'Shahidul', lastName: 'Islam', age: 25},
{firstName: 'Mr.', lastName: 'Sabbir', age: 32},
{firstName: 'Sk.', lastName: 'Shamim', age: 37},
];
// āĻāĻŽāĻžāĻĻā§āϰ āĻĒā§āϰā§ā§āĻāύ⧠āĻāĻŋāύā§āύ function āϏāĻŽā§āĻšāĻ
// ā§Ļā§§, āĻāĻāĻāĻŋ array of object āĻĨā§āĻā§ users full name āϞāĻŋāϏā§āĻ āϤā§āϰ⧠āĻāϰāϤ⧠āĻšāĻŦā§;
const getFullName = function(user) {
return user.firstName + " " + user.lastName
}
// āĻāĻĻāĻžāĻšāϰāĻŖ ⧍, āĻāĻāĻāĻŋ array of object āĻĨā§āĻā§ āϝāĻžāĻĻā§āϰ age ā§Šā§Ļ āĻāϰ āĻŦā§āĻļāĻŋ āϤāĻžāĻĻā§āϰ āϞāĻŋāϏā§āĻ āĻŦā§āϰ āĻāϰāϤ⧠āĻšāĻŦā§;
const getAgeOver30 = user => user.age < 30 ? user : null;
const calculate = function (users, callbackFunc) {
let output = []; // Output store āĻšāĻŦā§
// āϝā§āĻšā§āϤ⧠input āĻāĻāĻāĻŋ array āĻāĻŦāĻ āĻāϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ input āĻāϰ āĻāĻĒāϰ function āĻāĻžāĻ āĻāϰāĻŦā§ āϤāĻžāĻ for loop
for(let i = 0; i <users.length; i++) {
// output.push(callbackFunc(users[i]));
// To handel null and undefined valu
const result = callbackFunc(users[i]);
if (result != null) {
output.push(result);
}
}
return output;
}
console.log(calculate(users, getAgeOver30));
// Output:
// {firstName: 'Anisul', lastName: 'Islam', age: 20}
// {firstName: 'Shahidul', lastName: 'Islam', age: 25}
console.log(calculate(users, getFullName));
// Output: ['Khan Rabiul', 'Anisul Islam', 'Shahidul Islam', 'Mr. Sabbir', 'Sk. Shamim']
const numbers = [4,5,8,3,7,9,10,56];
const calculate = function(numbers, operation) {
let output = [];
for(let i = 0; i < numbers.length; i++) {
if (output !== null) {
output.push(operation(numbers[i]));
}
}
return output;
}
// Double
const double = function (number) {
return number * 2;
}
// Triple
const triple = function (number) {
return number * 3;
}
// power
const power4 = function (number) {
return Math.pow(number,4);
}
console.log(calculate(numbers, double));
// Output: [8, 10, 16, 6, 14, 18, 20, 112]
console.log(calculate(numbers, triple));
// Output: [12, 15, 24, 9, 21, 27, 30, 168]
console.log(calculate(numbers, power4));
// Output: [256, 625, 4096, 81, 2401, 6561, 10000, 9834496]
āĻ āϰā§āĻĨāĻžā§ function return āĻĒā§āϞ⧠āĻŦāĻž arguments āĻĨā§āĻā§ āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ function āĻā§āϰāĻšāĻŖ āĻāϰāϞ⧠function āĻāĻŋ, Higher Order functionāĨ¤
đ§âđģ Recursion Function
āϝāĻāύ āĻā§āύ āϏāĻŽāϏā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύā§āϰ āĻāύā§āϝ āĻāĻāĻŋ āĻāĻžāĻ āĻŦāĻžāϰ āĻŦāĻžāϰ āĻāϰāϤ⧠āĻšā§, āϤāĻāύ āϤāĻžāĻā§ Recursive Function āĻŦāϞā§āĨ¤
āĻĒā§āϰāϤā§āϝāĻžāĻļāĻŋāϤ āĻĢāϞāĻžāĻĢāϞ āĻĒāĻžāĻā§āĻžāϰ āĻāύā§āϝ āĻā§āύ āĻāĻžāĻ āĻŦāĻžāϰ āĻŦāĻžāϰ āĻāϰāĻž(function call āĻāϰāĻž)-āĻā§ recursion function āĻŦāϞā§āĨ¤ **
āĻāĻĻāĻžāĻšāϰāĻŖ: āĻĢā§āϝāĻžāĻā§āĻā§āϰāĻŋāϝāĻŧāĻžāϞ āĻĢāĻžāĻāĻļāύ
function factorial (num) {
// base case
if(num === 0) {
return 1;
}
return num * factorial(num -1);
}
console.log(factorial(5));
// Output: 120
đ§âđģ Recursion āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§āĻ
- Function Declaration
- Base Case
- Recursive Call command
đ Function Declaration:
āϏāĻžāϧāĻžāϰāĻŖ function āϝā§āĻāĻžāĻŦā§ declare āĻāϰāĻž āĻšā§, āĻāĻāĻžāĻ āĻ āĻŋāĻ āϤā§āĻŽāύāĨ¤
function recursionFunction () {
}
Base Case:
Base Case āĻ *recursion function*
āĻāϰ āĻŽā§āϞ āĻāĻŋāϤā§āϤāĻŋāĨ¤
Base case āĻāĻžāĻĄāĻŧāĻž *recursion function*
āĻāĻāĻāĻŋ āĻ
āϏā§āĻŽ āϞā§āĻĒā§ āĻĒāϰāĻŋāĻŖāϤ āĻšāĻŦā§ āĻāĻŦāĻ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻā§āϰā§āϝāĻžāĻļ āĻāϰāĻŦā§āĨ¤
*Recursion*
āĻĢāĻžāĻāĻļāύ⧠"base case" āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻļāϰā§āϤ āϝāĻž self-calling āĻŦāύā§āϧ āĻāϰāĻžāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧāĨ¤ āĻāĻ āĻļāϰā§āϤāĻāĻŋ āĻĒā§āϰāĻŖ āĻšāϞ⧠āĻĢāĻžāĻāĻļāύāĻāĻŋ āĻāϰ āύāĻŋāĻā§āĻā§ āĻāϞ āĻāϰ⧠āύāĻž āĻāĻŦāĻ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻŽāĻžāύ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§āĨ¤
`*Base case*` āĻŽā§āϞāϤ āĻāĻāĻāĻŋ āϏā§āĻāĻĒāĻŋāĻ āĻĒāϝāĻŧā§āύā§āĻ, āϝāĻž āϰāĻŋāĻāĻžāϰāϏāύāĻā§ āĻ āϏā§āĻŽ āϞā§āĻĒā§ āĻĒāϰāĻŋāĻŖāϤ āĻšāĻāϝāĻŧāĻž āĻĨā§āĻā§ āϰāĻā§āώāĻž āĻāϰā§āĨ¤
āĻāĻĒāϰā§āϰ āĻāĻĻāĻžāĻšā§āϰāύā§āĻāĻŋāϤ⧠*base case
* āĻšāĻŋāϏā§āĻŦā§ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§ā§āĻā§āĨ¤ āĻāĻāĻžāύ⧠āϝāĻāύ num = 0; āĻšāĻŦā§ *return
* value āĻšāĻŦā§ 1 āĻāĻŦāĻ *function*
āĻāĻŋ āĻŦāύā§āϧ āĻšāĻŦā§āĨ¤ **
if(num === 0) {
return 1;
}
đ The Recursion Call command:
āĻāĻ āĻ
āĻāĻļāĻāĻŋ āĻŽā§āϞāϤ āĻāĻāĻāĻŋ funciton
āĻŦāĻžāϰ āĻŦāĻžāϰ *call*
āĻāϰāĻžāϰ āĻāύā§āϝ āĻĻāĻžā§ā§āĨ¤ āĻāĻŦāĻžāϰ āĻ
āĻāĻļ āĻĨā§āĻā§āĻ āĻāĻžāĻā§āĻā§āώāĻŋāϤ āĻĢāϞāĻžāĻĢāϞ āύāĻŋāϰā§āϧāĻžāϰāĻŋāϤ āĻšā§āĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖ āĻāϰāĻ
*return num * factorial(num -1);*
āĻāĻĻāĻžāĻšāϰāĻŖ ⧍āĻ āĻāĻāĻāĻŋ function āϤā§āϰ⧠āĻāϰ, āϝā§āĻāĻŋ āĻĒā§āϰāĻžāĻĒā§āϤ āϏāĻāĻā§āϝāĻžāĻā§ āĻŦāĻŋāĻĒāϰā§āϤāĻā§āϰāĻŽā§ āĻāĻāĻāĻĒā§āĻ āĻĒā§āϰāĻĻāĻžāύ āĻāϰāĻŦā§;
// function declaration
function decendingOrder (num) {
let decndingNumbers = [];
// base case
if(num <= 0) {
return;
}
console.log(num);
decendingOrder(num - 1);
}
console.log( decendingOrder(5))
// Output: 5 4 3 2 1
āĻāĻĻāĻžāĻšāϰāĻŖ ā§ŠāĻ āĻāĻāĻāĻŋ function āϤā§āϰ⧠āĻāϰ, āϝā§āĻāĻŋ āĻĒā§āϰāĻžāĻĒā§āϤ stirng āĻŦāĻŋāĻĒāϰā§āϤāĻā§āϰāĻŽā§ āĻāĻāĻāĻĒā§āĻ āĻĒā§āϰāĻĻāĻžāύ āĻāϰāĻŦā§;
function reverseString (string) {
if (string.length == 1) {
return string;
} else {
return string.slice(-1) + reverseString(string.slice(0, -1));
}
}
console.log(reverseString("string"));
//Output: "gnirts"
// 1. slice āĻŽā§āĻĨāĻĄāĻāĻŋ āϏā§āĻā§āϰāĻŋāĻ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻ
āĻāĻļ āĻāĻžāĻā§ āĻāĻŦāĻ āύāϤā§āύ āĻāĻāĻāĻŋ āϏā§āĻā§āϰāĻŋāĻ āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§āĨ¤
// 2. āĻāĻāĻžāύ⧠slice(-1) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§ā§āĻā§, āϝāĻžāϰ āĻŽāĻžāύ⧠āĻšāϞ⧠āϏā§āĻā§āϰāĻŋāĻ āĻāϰ āĻļā§āώ āĻ
āĻā§āώāϰāĻāĻŋ āĻā§āĻā§ āύā§āĻā§āĻžāĨ¤
// āĻāĻĻāĻžāĻšāϰāĻŖ: "string".slice(-1) āĻāϰ āĻāĻāĻāĻĒā§āĻ āĻšāĻŦā§ "g"āĨ¤
// string.slice(0, -1):
// slice(0, -1) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏā§āĻā§āϰāĻŋāĻ āĻāϰ āĻĒā§āϰāĻĨāĻŽ āĻĨā§āĻā§ (āĻāύā§āĻĄā§āĻā§āϏ 0 āĻĨā§āĻā§) āĻļā§āώā§āϰ āĻ āĻŋāĻ āĻāĻā§āϰ āĻ
āĻā§āώāϰ āĻĒāϰā§āϝāύā§āϤ āϏāĻŦāĻāĻŋāĻā§ āĻā§āĻā§ āύā§āĻā§āĻž āĻšā§āĨ¤
// āĻāĻĻāĻžāĻšāϰāĻŖ: "string".slice(0, -1) āĻāϰ āĻāĻāĻāĻĒā§āĻ āĻšāĻŦā§ "strin"āĨ¤
// + āĻ
āĻĒāĻžāϰā§āĻāϰ:
// + āĻ
āĻĒāĻžāϰā§āĻāϰ āĻāĻāĻžāύ⧠āϏā§āĻā§āϰāĻŋāĻ āĻāύāĻā§āϝāĻžāĻāĻŋāύā§āĻļāύ (āĻĻā§āĻ āĻŦāĻž āϤāϤā§āϧāĻŋāĻ āϏā§āĻā§āϰāĻŋāĻ āĻāĻāϤā§āϰāĻŋāϤ āĻāϰāĻž) āĻāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāĻā§āĻā§āĨ¤
// āĻāĻĻāĻžāĻšāϰāĻŖ: "g" + "strin" āĻāϰ āĻāĻāĻāĻĒā§āĻ āĻšāĻŦā§ "gstrin"āĨ¤
// reverseString("string") āĻāϰ āϧāĻžāĻĒā§ āϧāĻžāĻĒā§ āĻĒā§āϰāϏā§āϏāĻŋāĻ āĻšāĻŦā§:
// āĻĒā§āϰāĻĨāĻŽ āĻāϞ: "g" + reverseString("strin")
// āĻĻā§āĻŦāĻŋāϤā§ā§ āĻāϞ: "n" + reverseString("stri")
// āϤā§āϤā§ā§ āĻāϞ: "i" + reverseString("str")
// āĻāϤā§āϰā§āĻĨ āĻāϞ: "r" + reverseString("st")
// āĻĒāĻā§āĻāĻŽ āĻāϞ: "t" + reverseString("s")
// āώāώā§āĻ āĻāϞ (Base case): "s"
//āĻĢāĻžāĻāύāĻžāϞāĻŋ, āϏāĻŦ āĻāύāĻā§āϝāĻžāĻāĻŋāύā§āĻļāύ āĻšā§ā§ āĻāϞā§āĻā§ āϏā§āĻā§āϰāĻŋāĻ "gnirts" āϰāĻŋāĻāĻžāϰā§āύ āĻšāĻŦā§āĨ¤
đ Or, with loop
const str = "small";
function rev(str) {
let revStr= "";
for(let i = str.length -1; i>= 0; i--) {
revStr += str[i];
}
return revStr;
}
console.log(rev(str));
// Output: llams
Recursion function āĻā§āĻĄ āĻĒā§āĻž āĻ āϏāĻšāĻā§ āĻā§āϞ āĻā§āĻā§ āĻĒā§āϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰ⧠āĻāĻŋāύā§āϤ⧠āĻ āϏāĻāĻā§āϝāĻŦāĻžāϰ function call āĻāϰāĻžāϰ āĻāĻžāϰāĻŖā§ performance āĻāĻžāϰāĻžāĻĒ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
đ§âđģ Currying
currying function āĻāĻŽāύ functional āϧāĻžāϰāĻŖāĻž āϝā§āĻāĻžāύ⧠āĻāĻāĻžāϧāĻŋāĻ arguments āĻĨāĻžāĻāϞā§āĻ function āĻāĻŋ āĻāĻ āϏāĻžāĻĨā§ āĻāĻāĻāĻŋāϰ āĻŦā§āĻļāĻŋ argument receive āĻāϰ⧠āύāĻžāĨ¤ āĻ
āϰā§āĻĨāĻžā§ āĻĒā§āϰāϤāĻŋāĻāĻŋ argument āĻāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ function declare āĻ return āĻāϰā§āĨ¤ āϤāĻŦā§ āĻā§āύ function āĻāϰ āĻāύā§āϝ argument pass āĻāϰāϞā§āĻ function āĻāĻŋ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāĻŋ āĻā§āĻĄā§āϰ āĻĒā§āύāĻāĻŦā§āϝāĻŦāĻšāĻžāϰāϝā§āĻā§āϝāϤāĻž āĻŦāĻžāĻĄāĻŧāĻžāϝāĻŧ āĻāĻŦāĻ āĻā§āĻĄāĻā§ āĻā§āĻ āĻ āϏā§āĻĒāώā§āĻ āĻāϰ⧠āϤā§āϞā§āĨ¤
function add(a) {
return function(b) {
return function(c) {
return a + b + c;
}
}
}
console.log(add(1)(2)(3)); // Output: 6
*āĻāĻāĻāĻŋ argument āύāĻž āĻĻāĻŋā§ā§āĻ *
function add(a) {
return function(b) {
return function(c) {
return a + b ;
}
}
}
console.log(add(1)(2)()); // Output: 3
Top comments (1)
Good jobâ¤ī¸