-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path26-Closures.js
More file actions
73 lines (54 loc) · 1.5 KB
/
26-Closures.js
File metadata and controls
73 lines (54 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// -----------------------------
// Example 1: Lexical Scope
// -----------------------------
function outer() {
let name = "JD"; // outer function variable
function inner() {
let age = 25; // inner function variable
console.log(name); // can access outer variable
console.log(age); // can access its own variable
}
inner();
// console.log(age); ❌ Error
// age is not accessible here because it is inside inner()
}
outer();
// -----------------------------
// Example 2: Basic Closure
// -----------------------------
function outer() {
let count = 0; // this variable will be remembered
function inner() {
count++; // updates outer variable
console.log(count);
}
console.log(`Initial count: ${count}`);
return inner; // returning inner function creates a closure
}
const counter = outer(); // outer() runs once
counter(); // 1
counter(); // 2
// -----------------------------
// Example 3: Closure with Parameters
// -----------------------------
function greet(name) {
return function () {
console.log(`Hello ${name}`);
};
}
const greetJD = greet("JD");
greetJD(); // Hello JD
const greetChannel = greet("JDCodebase");
greetChannel(); // Hello JDCodebase
// -----------------------------
// Example 4: Multiple Closures
// -----------------------------
function multiply(x) {
return function (y) {
return x * y; // remembers value of x
};
}
const double = multiply(2);
console.log(double(5)); // 10
const triple = multiply(3);
console.log(triple(3)); // 9