-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path064-variable-shadowing.js
More file actions
78 lines (57 loc) · 1.38 KB
/
064-variable-shadowing.js
File metadata and controls
78 lines (57 loc) · 1.38 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
74
75
76
77
78
// 1: VARIABLE SHADOWING
const userName = "Alice";
function greet() {
const userName = "Bob"; // Shadows outer userName
console.log(userName) // "Bob"
}
greet()
console.log(userName) // "Alice"
let score = 100;
if (true) {
let score = 200; // Legal shadowing
console.log(score); // Output: 200
}
console.log(score); // Output: 100
// function example() {
// let value = 10;
// if (true) {
// var value = 20; // SyntaxError!
// }
// }
function example() {
var value = 10;
if (true) {
let value = 20; // Fine - let is block-scoped
console.log(value); // Output: 20
}
}
// 2: TEMPORAL DEAD ZONE
console.log(name); // ReferenceError!
let name = "John";
console.log(oldVar); // Output: undefined
var oldVar = "I'm hoisted";
console.log(newLet); // ReferenceError!
let newLet = "I'm in TDZ";
const x = 10;
{
console.log(x); // ReferenceError!
const x = 20; // Inner x is in TDZ
}
// BEST PRACTICES
// 1. Declare variables at the top
function calculatePrice() {
const basePrice = 100;
const taxRate = 0.1;
let total = 0;
total = basePrice * (1 + taxRate);
return total;
}
// 2. Use unique names to avoid shadowing
const config = { theme: "dark" };
function updateConfig() {
const userConfig = { theme: "light" };
console.log(userConfig.theme);
}
// 3. Prefer const, use let when needed, avoid var
const MAX_ITEMS = 50;
let currentItems = 0;