** π1. λ³μλ 무μμΈκ°?**
νλ‘κ·Έλ¨μμ λ°μ΄ν°λ₯Ό μ μ₯ν μ μλ 곡κ°(μ΄λ¦)
μ½κ² λ§ν΄, κ°μ λ΄λ μμ π
π·οΈ 2. λ³μ μ μΈ ν€μλ λΉκ΅
ν€μλ | μ€μ½ν | νΈμ΄μ€ν | TDZ | μ¬μ μΈ | μ¬ν λΉ | νΉμ§ |
---|---|---|---|---|---|---|
var |
ν¨μ | O (μ΄κΈ°ν: undefined) | X | O | O | μ€λλ λ°©μ, κΆμ₯ X |
let |
λΈλ‘ | O (μ΄κΈ°ν X) | O | X | O | νλ νμ€ |
const |
λΈλ‘ | O (μ΄κΈ°ν X) | O | X | X | μμ, λ¨ κ°μ²΄/λ°°μ΄ λ΄λΆ μμ κ°λ₯ |
π― 3. μ€μ½ν(Scope) μ¬ν
π© μ’ λ₯
μ’ λ₯ | μ€λͺ | λΉμ |
---|---|---|
μ μ μ€μ½ν | μ΄λμλ μ κ·Ό κ°λ₯ | β건물 μ 체μ μλ CCTVβ |
ν¨μ μ€μ½ν | ν¨μ λ΄μμλ§ μ ν¨ (var ) |
βλ°© μμμλ§ μΌμ§λ μ λ±β |
λΈλ‘ μ€μ½ν | {} λΈλ‘ λ΄ μ ν¨ (let , const ) |
βμΉΈλ§μ΄λ‘ ꡬλΆλ 곡κ°β |
π‘ μ€μ½ν μμ
function test() {
if (true) {
var x = 1;
let y = 2;
const z = 3;
}
console.log(x); // 1 (var β ν¨μ μ€μ½ν)
console.log(y); // ReferenceError (let β λΈλ‘ μ€μ½ν)
console.log(z); // ReferenceError (const β λΈλ‘ μ€μ½ν)
}
test();
π 4. νΈμ΄μ€ν (λμ΄μ¬λ¦Ό) μ¬ν
π₯ μ μ:
λ³μμ ν¨μ μ μΈμ΄ ν΄λΉ μ€μ½νμ μ΅μλ¨μΌλ‘ λμ΄μ¬λ €μ§λ νμ
π ν΅μ¬ μ°¨μ΄
ν€μλ | νΈμ΄μ€ν | μ΄κΈ°ν |
---|---|---|
var |
O | undefined |
let , const |
O | μ΄κΈ°ν X β TDZ λ°μ |
π§© νΈμ΄μ€ν μ¬ν μμ
console.log(a); // undefined (var)
var a = 10;
console.log(b); // ReferenceError (let)
let b = 20;
π λ΄λΆ λμ:
1. var a β λ©λͺ¨λ¦¬ κ³΅κ° ν보 β undefined
2. let b β λ©λͺ¨λ¦¬ κ³΅κ° ν보 β μ΄κΈ°ν μ μ κ·Ό κΈμ§ (TDZ)
π΅οΈ 5. TDZ (Temporal Dead Zone) μμ μ΄ν΄
μ©μ΄ | μ€λͺ |
---|---|
TDZ | let /const κ° μ μΈλ λΈλ‘μ μμ ~ μ΄κΈ°ν μ κΉμ§ μ κ·Ό λΆκ° |
μ΄μ | λ³μμ βμμ μ±β 보μ₯ (μ΄κΈ°ν μ λ κ° μ°Έμ‘° λ°©μ§) |
π TDZ μ¬ν μμ
{
// TDZ μμ
console.log(myVar); // β ReferenceError
let myVar = 100;
// TDZ λ (μ΄κΈ°ν ν μ κ·Ό κ°λ₯)
}
π λΉμ :
TDZ = μμ½ μμ μ μ μ₯ λΆκ°ν 곡μ°μ₯ π
var: μμ½ μμ΄λ 무쑰건 μ μ₯
let/const: μμ½ μκ° μ΄νμλ§ μ μ₯ κ°λ₯, μ μ 무쑰건 μλ¬
π 6. μ¬μ μΈ & μ¬ν λΉ
ν€μλ | μ¬μ μΈ | μ¬ν λΉ | μ£Όμ |
---|---|---|---|
var |
O | O | μ¬λ¬ λ² μ μΈ κ°λ₯ (νΌλ) |
let |
X | O | λ³μ κ° λ³κ²½ κ°λ₯ |
const |
X | X (λ°μΈλ© λΆλ³) | λ¨, κ°μ²΄ λ΄λΆ μμ±μ λ³κ²½ κ°λ₯ |
π const κ°μ²΄ λ΄λΆ μμ± λ³κ²½ μμ
const obj = { name: "JS" };
obj.name = "JavaScript"; // κ°λ₯
const arr = [1, 2];
arr.push(3); // κ°λ₯
π’ ν·κ°λ¦¬λ ν¬μΈνΈ!
constλ λ³μ λ°μΈλ© λΆλ³
κ°μ²΄ μ체μ μ°Έμ‘° κ°μ μ μ§, λ΄λΆ νλ‘νΌν°λ λ³κ²½ κ°λ₯!
π₯ 7. μ€λ¬΄μμ λ°μνλ λ³μ κ΄λ ¨ νΈλ© μμ
π₯ ν΄λ‘μ + 루ν λ¬Έμ
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1000);
}
// μΆλ ₯: 3, 3, 3 (λͺ¨λ 3)
μμΈ:
var
β ν¨μ μ€μ½ν β νλμ i 곡μ β 루ν λλκ³ i = 3
β
ν΄κ²°: let
μ¬μ©
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 1000);
}
// μΆλ ₯: 0, 1, 2 (λΈλ‘ μ€μ½ν)
β οΈ μ¬μ μΈ νΌλ μμ
var x = 10;
var x = 20; // κ°λ₯ (νΌλ μ λ°)
let y = 10;
let y = 20; // SyntaxError
π 8. κΈ°μ λ©΄μ λλΉ μ§λ¬Έ
μ§λ¬Έ | λ΅λ³ ν¬μΈνΈ |
---|---|
var, let, const μ°¨μ΄μ ? | μ€μ½ν, νΈμ΄μ€ν , TDZ, μ¬μ μΈ/μ¬ν λΉ μ°¨μ΄ κ΅¬μ²΄μ μΌλ‘ |
TDZλ? | μ΄κΈ°ν μ μ κ·Ό κΈμ§, ReferenceError λ°μ |
constμ κ°μ²΄ λ΄λΆ μμ± λ³κ²½ κ°λ₯? | O (λ°μΈλ© λΆλ³, λ΄λΆ κ°λ³μ± νμ©) |
var μ¬μ© μ λ°μν λ¬Έμ μ ? | ν¨μ μ€μ½ν β μλμΉ μμ κ° κ³΅μ , μ¬μ μΈ νΌλ |
ν΄λ‘μ + 루νμμ varκ³Ό let μ°¨μ΄? | let β λΈλ‘ μ€μ½ν, var β ν¨μ μ€μ½ν (κ° κ³΅μ λ¬Έμ λ°μ) |
π 9. λ Έμ μ© κΉλ ν μμ½
π© λ³μ ν€μλ λΉκ΅
ν€μλ | μ€μ½ν | νΈμ΄μ€ν | TDZ | μ¬μ μΈ | μ¬ν λΉ | νΉμ§ |
---|---|---|---|---|---|---|
var |
ν¨μ | O (undefined ) |
X | O | O | μ€λλ λ°©μ, κΆμ₯ X |
let |
λΈλ‘ | O (μ΄κΈ°ν X) | O | X | O | νλ κΈ°λ³Έ |
const |
λΈλ‘ | O (μ΄κΈ°ν X) | O | X | X | μμ, λ΄λΆ μμ κ°λ₯ |
π 10. λ©λͺ¨λ¦¬ λ΄λΆ λμκΉμ§ μ¬ν μ 리
λ¨κ³ | λμ |
---|---|
μ μΈ | λ©λͺ¨λ¦¬ κ³΅κ° ν보 |
var | μ΄κΈ°ν: undefined |
let, const | TDZ μν β μ΄κΈ°ν μ μ κ·Ό μ μλ¬ |
ν λΉ | μ€μ κ° μ μ₯ |
π 1οΈβ£ μλ°μ€ν¬λ¦½νΈ μλ£νμ΄λ?
κ°μ μ’ λ₯μ μ±μ§μ μ μνλ κ²!
μλ°μ€ν¬λ¦½νΈ νΉμ§:
- λμ νμ μΈμ΄ (Dynamic Typing) β λ³μ μ μΈ μ νμ λͺ μ X β μ€ν μ νμ κ²°μ λ¨ β μ μ°μ± λμ = μ€μνκΈ° μ¬μ
π 2οΈβ£ μλ£νμ 2λ λΆλ₯
κ΅¬λΆ | μ’ λ₯ | μ μ₯ μμΉ | λ³΅μ¬ λ°©μ | λΆλ³μ± |
---|---|---|---|---|
μμ νμ (Primitive) | Number, String, Boolean, undefined, null, Symbol, BigInt | Stack | κ° λ³΅μ¬ (κΉμ 볡μ¬) | Immutable (λΆλ³) |
μ°Έμ‘° νμ (Reference) | Object, Array, Function, Date, RegExp λ± | Heap (μ£Όμ), Stack (μ£Όμ μ μ₯) | μ°Έμ‘° λ³΅μ¬ (μμ 볡μ¬) | Mutable (κ°λ³) |
π₯ 3οΈβ£ μμ νμ (Primitive Types) μμ μ¬ν
π’ (1) Number
- μ μ, μ€μ, NaN, Infinity λͺ¨λ ν¬ν¨
- λ΄λΆμ μΌλ‘ 64bit λΆλμμμ (IEEE 754)
let int = 42;
let float = 3.14;
console.log(1 / 0); // Infinity
console.log('abc' * 2); // NaN
π λΆλμμμ μ€μ°¨ μ¬ν:
console.log(0.1 + 0.2); // 0.30000000000000004
β
ν΄κ²°: Number.EPSILON
, λλ μ μλ‘ λ³ν ν κ³μ°
π€ (2) String
- λ¬Έμμ΄ μ μ₯
- ββ, ββ, `` λͺ¨λ μ¬μ© κ°λ₯
- λΆλ³μ± β μμ μ μλ‘μ΄ κ° μμ±
let str = 'JS';
str[0] = 'A';
console.log(str); // 'JS'
π ν νλ¦Ώ 리ν°λ΄ (ES6+)
let name = 'JavaScript';
console.log(`Hello, ${name}`);
π₯ (3) Boolean
javascript
볡μ¬νΈμ§
let isDone = true;
let isFalse = false;
π Truthy / Falsy μ¬ν:
Falsy κ°
false
,
0
,
""
,
null
,
undefined
,
NaN
if (0) console.log('Falsy'); // μ€ν μ λ¨
π³οΈ (4) undefined
- λ³μ μ μΈ β κ° ν λΉ X
let a;
console.log(a); // undefined
π (5) null
- μλμ μΌλ‘ βκ° μμβ νμ
let b = null;
π λ©΄μ λ¨κ³¨:
console.log(typeof null); // 'object' β JS μ΄μ°½κΈ° λ²κ·Έ
π (6) Symbol (ES6)
- μ μΌνκ³ λ³κ²½ λΆκ°λ₯ν κ°
let id1 = Symbol('id');
let id2 = Symbol('id');
console.log(id1 === id2); // false
β μ€λ¬΄: κ°μ²΄ νλ‘νΌν°μ κ³ μ ν€λ‘ νμ©
π’ (7) BigInt (ES2020)
let big = 123456789012345678901234567890n;
console.log(big * 2n);
π μ©λ: 2^53-1 μ΄κ³Ό ν° μ μ μ²λ¦¬
ποΈ 4οΈβ£ μ°Έμ‘° νμ (Reference Types) μ¬ν
μ’ λ₯ | νΉμ§ | μμ |
---|---|---|
Object | ν€-κ° μ | {name: 'JS'} |
Array | μμ μλ κ° λ¦¬μ€νΈ | [1,2,3] |
Function | μ€ν κ°λ₯ν κ°μ²΄ | function() {} |
Date, RegExp λ± | λ΄μ₯ κ°μ²΄ | Β |
π μ°Έμ‘° νμ νΉμ§
νΉμ± | μ€λͺ |
---|---|
Heap μ μ₯ | μ€μ κ°μ Heap, Stackμλ μ£Όμ |
μμ λ³΅μ¬ | μ°Έμ‘° κ°λ§ 볡μ¬, μλ³Έ μν₯ |
Mutable | λ΄λΆ κ° μμ λ‘κ² λ³κ²½ κ°λ₯ |
π μμ λ³΅μ¬ λ¬Έμ μ¬ν
let obj1 = {name: 'JS'};
let obj2 = obj1;
obj2.name = 'Changed';
console.log(obj1.name); // 'Changed'
β κΉμ λ³΅μ¬ (Deep Copy)
let obj3 = structuredClone(obj1);
π μ€λ¬΄μμλ lodash cloneDeep()
λ μ¬μ©
π₯ 5οΈβ£ λΆλ³μ±(Immutable) vs κ°λ³μ±(Mutable)
νμ | λΆλ³μ± μ¬λΆ | μμ μ λμ |
---|---|---|
μμ νμ | λΆλ³ | μ κ° μμ±, κΈ°μ‘΄ λ³κ²½ λΆκ° |
μ°Έμ‘° νμ | κ°λ³ | μλ³Έ λ΄λΆ μμ± λ³κ²½ κ°λ₯ |
λ©λͺ¨λ¦¬ ꡬ쑰 μκ°ν
Primitive:
[ Stack ] β κ° μ체 μ μ₯
Reference:
[ Stack ] β μ£Όμ β [ Heap ] μ€μ λ°μ΄ν°
π― 6οΈβ£ μ€λ¬΄ & λ©΄μ νμ΄ ν¬μΈνΈ
μ§λ¬Έ | ν΅μ¬ |
---|---|
μμ & μ°Έμ‘° νμ μ°¨μ΄? | Stack vs Heap, λΆλ³ vs κ°λ³, λ³΅μ¬ μ°¨μ΄ |
typeof null κ²°κ³Ό? | βobjectβ, JS μ΄κΈ° λ²κ·Έ |
μμ 볡μ¬μ κΉμ λ³΅μ¬ μ°¨μ΄? | μ£Όμ 곡μ μ¬λΆ |
Truthy/Falsy κ° κ΅¬λΆ? | μ€λ¬΄μμ 쑰건문 μ£Όμ νμ |
λΆλ³μ± μ μ§ μ μ€μνκ°? | μν μμΈ‘ κ°λ₯, Redux λ±μμ ν΅μ¬ |
π 7οΈβ£ κΉλ μ 리
π μλ£ν μ 리ν
λΆλ₯ | νμ | λΆλ³μ± | μ μ₯ μμΉ | λ³΅μ¬ |
---|---|---|---|---|
μμ νμ | Number, String, Boolean, undefined, null, Symbol, BigInt | λΆλ³ | Stack | κ° λ³΅μ¬ |
μ°Έμ‘° νμ | Object, Array, Function λ± | κ°λ³ | Heap(κ°), Stack(μ°Έμ‘°) | μμ λ³΅μ¬ |
π λ§λ¬΄λ¦¬ μ½λ μμ
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
/*
π 1. κΈ°λ³Έ μλ£ν (Primitive Type)
1) number : μ μ, μ€μ ꡬλΆμ΄ μλ€
NaN (Not a Number) : μ«μκ° μλ
Infinity/-Infinity: +0/-0μΌλ‘ λλ κ°. λΆλ₯ κ°.
2) string : λ¬Έμ/λ¬Έμμ΄ κ΅¬λΆμ΄ μλ€. μμλ°μ΄ν(''), ν°λ°μ΄ν("") λͺ¨λ μ¬μ© κ°λ₯
3) boolean : true/false
4) null : κ°μ΄ "μμ" (μλμ μΌλ‘ λΉμλ )
5) undefined : κ°μ΄ μ μ₯λ μ μ΄ μλ€. μ΄κΈ°νλμ§ μμ μνμ λ³μμ
6) symbol (ES6) : μ μΌν κ° (μ¬λ³Όν)
7) bigint (ES11) : μμ£Ό ν° μ μ
*/
console.log("π number νμ
μμ");
let num = 123;
console.log(num, typeof num); // 123 'number'
let float = 3.14;
console.log(float, typeof float); // 3.14 'number'
// NaN (μ«μνμΈλ° 'μ«μκ° μλ'β)
let invalidNum = 100 / "μ¬κ³Ό";
console.log(invalidNum, typeof invalidNum); // NaN 'number'
// Infinity / -Infinity
console.log(1 / 0); // Infinity
console.log(-1 / 0); // -Infinity
console.log("\nπ string νμ
μμ");
let str1 = 'hello';
let str2 = "world";
console.log(str1, typeof str1); // hello 'string'
console.log(str2, typeof str2); // world 'string'
console.log("\nπ boolean νμ
μμ");
let isTrue = true;
let isFalse = false;
console.log(isTrue, typeof isTrue); // true 'boolean'
console.log(isFalse, typeof isFalse); // false 'boolean'
console.log("\nπ nullκ³Ό undefined μ°¨μ΄");
let empty = null;
let notAssigned;
console.log(empty, typeof empty); // null 'object' (μλ°μ€ν¬λ¦½νΈμ μ€λλ μ€κ³ λ²κ·Έ π€―)
console.log(notAssigned, typeof notAssigned); // undefined 'undefined'
// μ¬λ³Ό, λΉ
μΈνΈ μ¬ν μμ
console.log("\nπ symbol, bigint μμ (μ¬ν)");
let sym = Symbol('unique');
console.log(sym, typeof sym); // Symbol(unique) 'symbol'
let big = 1234567890123456789012345678901234567890n;
console.log(big, typeof big); // 'bigint'
</script>
<script>
/*
π 2. μλ°μ€ν¬λ¦½νΈ λ³μμ νΉμ§
1) λμ νμ
(Dynamically Typed) - μ μΈνμ§ μμλ λ³μ μ¬μ© κ°λ₯ (β μΆμ²X, μ묡μ μ μλ³μλ¨)
2) λ³μ μ μΈμ μλ£ν μμ±νμ§ μλλ€
3) λ³μμ μ μ₯λ κ°μ λ°λΌ μλ£ν κ²°μ λ¨ => κ°μ΄ μμ λλ©΄ μλ£ν λ³κ²½ κ°λ₯
*/
// var ν€μλ μ¬μ© μμ
var a; // μ μΈ (μ΄κΈ°ν X)
console.log(a); // undefined
var a; // κ°μ μ΄λ¦μΌλ‘ μ¬μ μΈ κ°λ₯ (varμ νΉμ§!)
a = 10;
console.log(a, typeof a); // 10 'number'
// κ° λ³κ²½ β μλ£ν λ³κ²½
a = "Hello world";
console.log(a, typeof a); // Hello world 'string'
// λ³μ μ μΈ μμ΄ μ¬μ© (β μ묡μ μ μ λ³μ)
b = false;
console.log(b, typeof b); // false 'boolean'
/*
β οΈ **μ€μ**: μλ°μ€ν¬λ¦½νΈλ "λμ νμ
μΈμ΄"
λ³μμ μλ£νμ΄ κ°μ λ°λΌ λ°λλ―λ‘ μ€μν κ°λ₯μ±μ΄ νΌ!
*/
</script>
<script>
/*
π 3. λ³μ μ μΈ ν€μλ
1) var
(1) λ²μ : ν¨μ λ 벨 (function scope)
(2) λ³μ μ μΈ μλ΅ κ°λ₯ (β κΆμ₯νμ§ μμ)
(3) κ°μ λ³μλͺ
μΌλ‘ μ¬μ μΈ κ°λ₯
(4) μ΄κΈ°ν μλ΅ κ°λ₯ (undefined)
2) let (ES6)
(1) λ²μ : λΈλ‘ λ 벨 {} (μ§μ λ³μ)
(2) λ³μ μ μΈ μλ΅ β λΆκ°λ₯ (무쑰건 let)
(3) κ°μ λ³μλͺ
μ¬μ μΈ λΆκ°λ₯
(4) μ΄κΈ°ν μλ΅ κ°λ₯ (μ μΈ ν undefined μν, but TDZ μ‘΄μ¬)
3) const (ES6)
(1) λ²μ : λΈλ‘ λ 벨 {}
(2) μ μΈ μλ΅ β λΆκ°λ₯
(3) κ°μ λ³μλͺ
μ¬μ μΈ λΆκ°λ₯
(4) μ΄κΈ°ν μλ΅ β λΆκ°λ₯ (μ μΈκ³Ό λμμ μ΄κΈ°ν νμ)
(5) κ° λ³κ²½ λΆκ°λ₯ (μμ)
π‘ const κ°μ²΄λ λ°°μ΄μ κ²½μ° λ΄λΆ κ°μ λ³κ²½ κ°λ₯!
*/
console.log("\nπ let μμ");
let user = "user1";
console.log(user, typeof user); // user1 'string'
// let user = "user2"; // β μ€λ³΅ μ μΈ λΆκ°
console.log("\nπ const μμ");
const pw = "pw1";
console.log(pw, typeof pw); // pw1 'string'
// pw = "pw2"; // β κ° λ³κ²½ λΆκ°
// μ¬ν const κ°μ²΄ μμ
const person = { name: "μ² μ" };
person.name = "μν¬"; // λ΄λΆ κ°μ λ³κ²½ κ°λ₯!
console.log(person);
// const λ°°μ΄ μμ
const arr = [1, 2, 3];
arr.push(4);
console.log(arr); // [1, 2, 3, 4]
</script>
<script>
/*
π 4. νΈμ΄μ€ν
(Hoisting)
μλ°μ€ν¬λ¦½νΈλ μ½λ μ€ν μ , "λ³μ μ μΈ"κ³Ό "ν¨μ μ μΈ"μ μ½λ μ΅μλ¨μΌλ‘ λμ΄μ¬λ¦Ό!
1) varλ μ μΈλ§ λμ΄μ¬λ €μ§κ³ μ΄κΈ°νλ μ λ¨ (undefined)
2) let, constλ νΈμ΄μ€ν
λμ§λ§ TDZ(Temporal Dead Zone)μ λΉ μ§ β μ΄κΈ°ν μ μ κ·Ό μ μλ¬
*/
console.log("\nπ var νΈμ΄μ€ν
μμ");
console.log(c); // undefined (μ μΈμ μ¬λΌκ°)
var c;
c = Math.sqrt(25); // Math λμλ¬Έμ μμ !
console.log(c, typeof c); // 5 'number'
// console.log(userLet); // β ReferenceError
// let userLet = "νΈμ΄μ€ν
ν
μ€νΈ";
/*
β
μ¬ν κ°λ
: TDZ
let, constλ‘ μ μΈλ λ³μλ μ μΈ μ μ κ·Ό μ μλ¬ λ°μ (μ΄κΈ°ν μ , μ¬μ© λΆκ°!)
*/
</script>
<script>
/*
π 5. λ³μμ λ²μ (Scope)
1) var : ν¨μ λ 벨 μ€μ½ν
2) let, const : λΈλ‘ λ 벨 μ€μ½ν
*/
console.log("\nπ var μ€μ½ν μμ");
if (true) {
var age = 10; // ν¨μ μ 체μμ μ κ·Ό κ°λ₯
}
console.log(age, typeof age); // 10 'number'
console.log("\nπ let, const μ€μ½ν μμ");
if (true) {
const hobby = "μ΄λ"; // λΈλ‘ λ 벨
let name = "νκΈΈλ";
console.log(hobby, name); // μ μ μΆλ ₯
}
// console.log(hobby, name); // β ReferenceError (λΈλ‘ λ° μ κ·Ό λΆκ°)
</script>
<script>
/*
π 6. μ¬ν μμ : var vs let μ°¨μ΄
π varλ ν¨μ μ 체μμ λ³μ 곡μ β λ°λ³΅λ¬Έμμ λ¬Έμ λ°μ κ°λ₯
*/
console.log("\nπ var λ°λ³΅λ¬Έ λ¬Έμ μ ");
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log("var i:", i), 100);
}
// κ²°κ³Ό: var i: 3, 3, 3 (iκ° μ μμμ 곡μ λ¨)
console.log("\nπ let λ°λ³΅λ¬Έ κ°μ ");
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log("let i:", i), 100);
}
// κ²°κ³Ό: let i: 0, 1, 2 (κ° λΈλ‘λ§λ€ i λ
립μ μΌλ‘ μ‘΄μ¬)
</script>
</body>
</html>