π λΈλ‘μ ν¨λ²μλ₯Ό λ°λ₯΄λ const
- λΈλ‘μ λ¬Έλ§₯ λ΄μμ μ¬ν λΉν μ μλ λ³μ μ λλ€.
- constλ ν λ² μ μΈλλ©΄ μ¬ν λΉμ΄ λΆκ°λ₯ν λ³μλ₯Ό μ μΈνλ λ° μ¬μ©λ©λλ€.
- κ·Έλ¬λ constλ‘ μ μΈλ λ³μκ° κ°λ¦¬ν€λ κ°(κ°μ²΄ λλ λ°°μ΄ λ±)μ λ΄λΆλ μμ λ μ μμ΅λλ€. μ΄λ λ³μκ° μ°Έμ‘°νλ λ©λͺ¨λ¦¬ μ£Όμκ° λ³κ²½λμ§ μλλ€λ μλ―Έμ λλ€.
const discountable = []; for(let i = 0; i < cart.length; i++){ discountable.push(i); }
π λΈλ‘μ ν¨λ²μλ₯Ό λ°λ₯΄λ let
- letμ λ³μλ₯Ό μ μΈνκ³ , νμμ λ°λΌ μ¬ν λΉν μ μλ ν€μλμ λλ€.
- letμ λΈλ‘ μ ν¨λ²μ(block scope)λ₯Ό κ°μ§λ©°, λΈλ‘ μΈλΆμμλ ν΄λΉ λ³μμ μ κ·Όν μ μμ΅λλ€.
- κ°μ λΈλ‘ λ΄μμ κ°μ μ΄λ¦μ λ³μλ₯Ό μ¬μ μΈν μ μμ΅λλ€.
if (true) { let blockScopedVar = 'I am a block-scoped variable'; console.log(blockScopedVar); // μ ν¨ } console.log(blockScopedVar); // μλ¬: blockScopedVar is not defined
π μ΄νμ μ ν¨λ²μ(lexical scope)λ₯Ό λ°λ₯΄λ var
- varλ μ΄νμ μ ν¨λ²μ(lexical scope)λ₯Ό κ°μ§λ©°, ν¨μ μ ν¨λ²μλ₯Ό λ°λ¦ λλ€.
- ν¨μ λ΄μμ μ μΈλ λ³μλ ν¨μ μ 체μμ μ κ·Ό κ°λ₯νλ©°, ν¨μ μΈλΆμμλ λ³μμ μ κ·Όν μ μμ΅λλ€.
- κ°μ ν¨μ λ΄μμ κ°μ μ΄λ¦μ λ³μλ₯Ό μ¬μ μΈν μ μμ΅λλ€.
function exampleFunction() { var lexicalScopedVar = 'I am a lexical-scoped variable'; console.log(lexicalScopedVar); // μ ν¨ } console.log(lexicalScopedVar); // μλ¬: lexicalScopedVar is not defined
π varλ₯Ό μ¬μ©νμ¬ ν¨μ μ ν¨λ²μλ₯Ό λ°λ₯΄λ ν΄λ‘μ
// varλ₯Ό μ¬μ©ν ν΄λ‘μ μμ function createClosureVar() { var closuresVar = []; for (var i = 0; i < 5; i++) { closuresVar.push(function () { console.log(i); }); } return closuresVar; } var closuresVarArray = createClosureVar(); // ν΄λ‘μ νΈμΆ for (var j = 0; j < closuresVarArray.length; j++) { closuresVarArray[j](); // λͺ¨λ ν΄λ‘μ κ° 5λ₯Ό μΆλ ₯ }
- varλ₯Ό μ¬μ©ν κ²½μ°, for 루νμμ μμ±λ ν΄λ‘μ κ° iλ₯Ό μ°Έμ‘°νκ³ μμ΅λλ€.
- νμ§λ§ varλ ν¨μ μ€μ½νλ₯Ό κ°κΈ° λλ¬Έμ for 루νκ° μ’ λ£λ νμλ iλ μ μ μ€μ½νμ λ¨μ μκ³ , ν΄λ‘μ λ νμ μ μ μ€μ½νμ μλ iλ₯Ό μ°Έμ‘°ν©λλ€.
- λ°λΌμ ν΄λ‘μ λ₯Ό νΈμΆν λ λͺ¨λ ν΄λ‘μ κ° iμ μ΅μ’ κ°μΈ 5λ₯Ό μΆλ ₯ν©λλ€.
π letμ μ¬μ©νμ¬ ν΄λ‘μ λ¬Έμ λ₯Ό ν΄κ²°ν μ½λ
// letμ μ¬μ©ν ν΄λ‘μ μμ function createClosureLet() { var closuresLet = []; for (let i = 0; i < 5; i++) { closuresLet.push(function () { console.log(i); }); } return closuresLet; } var closuresLetArray = createClosureLet(); // ν΄λ‘μ νΈμΆ for (let j = 0; j < closuresLetArray.length; j++) { closuresLetArray[j](); // κ° ν΄λ‘μ κ° ν΄λΉνλ κ°(0λΆν° 4κΉμ§)μ μΆλ ₯ }
- letμ μ¬μ©ν κ²½μ°, for 루νμμ μμ±λ ν΄λ‘μ κ° iλ₯Ό μ°Έμ‘°νκ³ μμ΅λλ€.
- letμ λΈλ‘ μ€μ½νλ₯Ό κ°κΈ° λλ¬Έμ κ° ν΄λ‘μ λ ν΄λΉ λΈλ‘μμμ iλ₯Ό μ°Έμ‘°ν©λλ€.
- λ°λΌμ ν΄λ‘μ λ₯Ό νΈμΆν λ κ°κ°μ ν΄λ‘μ λ μμ μ΄ μμ±λ μμ μ i κ°μ μΆλ ₯νκ² λ©λλ€.
π λΈλ‘ μ ν¨λ²μ (Block Scope)
- λΈλ‘ μ ν¨λ²μλ μ€κ΄νΈ {}λ‘ λλ¬μΈμΈ μμμ κ°λ¦¬ν΅λλ€.
- let λ° const ν€μλλ‘ μ μΈλ λ³μλ λΈλ‘ μ ν¨ λ²μλ₯Ό κ°μ§λλ€. μ¦, ν΄λΉ λ³μλ κ·Έ λ³μκ° μ μΈλ λΈλ‘ λ΄μμλ§ μ ν¨νλ©° μΈλΆμμ μ κ·Όν μ μμ΅λλ€.
- λΈλ‘μ μ£Όλ‘ μ‘°κ±΄λ¬Έ (if, else, for, while λ±) λ΄λΆ, ν¨μ λ΄λΆ, λλ λ¨λ μ€κ΄νΈ λΈλ‘μΌλ‘ μ μλ©λλ€.
π μ΄νμ μ ν¨λ²μ (Lexical Scope λλ Static Scope)
μ΄νμ μ ν¨λ²μλ μ½λλ₯Ό μμ±νλ μμ μ κ²°μ λλ μ€μ½νμ μ’
λ₯μ
λλ€. λ³μκ° μ΄λμμ μ μΈλμλμ§μ λ°λΌ κ·Έ λ³μμ μ ν¨ λ²μκ° μ ν΄μ§λλ€. μ΄νμ μ ν¨λ²μλ ν¨μλ₯Ό μ΄λμ μμ±νλμ§μ λ°λΌ ν¨μμ μ€μ½νκ° κ²°μ λλ κ²μ μλ―Έν©λλ€.
function outer() { let outerVar = 'I am outer'; function inner() { let innerVar = 'I am inner'; console.log(outerVar); // outerVarλ μ΄νμ μ ν¨λ²μμ μν΄ μ κ·Ό κ°λ₯ console.log(innerVar); // innerVarλ νμ¬ μ€μ½νμ μ μΈλμ΄ μμ΄ μ§μ μ κ·Ό κ°λ₯ } inner(); console.log(outerVar); // outerVarλ μ¬μ ν μ΄νμ μ ν¨λ²μμ μν΄ μ κ·Ό κ°λ₯ console.log(innerVar); // Error: innerVarλ outer ν¨μμ μ€μ½νλ₯Ό λ²μ΄λμ μ κ·Ό λΆκ°λ₯ } outer();
μ μμ μμ inner ν¨μλ μμ μ μ€μ½νμ μΈλΆ ν¨μμΈ outer ν¨μμ μ€μ½νμ μ κ·Όν μ μμ΅λλ€. μ΄λ μ΄νμ μ ν¨λ²μμ μν κ²μ
λλ€. λ³μμ μ ν¨ λ²μλ μ½λλ₯Ό μμ±νλ μμ μ μ΄λ―Έ μ ν΄μ Έ μμ΅λλ€.
π ν¨μ μ ν¨λ²μ (Function Scope)
ν¨μ μ ν¨λ²μλ ν¨μ λ΄μμ μ μΈλ λ³μκ° ν¨μ λ΄λΆμμλ§ μ ν¨νλ€λ μμΉμ λνλ
λλ€. ν¨μ μ ν¨λ²μλ ν¨μκ° μ€νλ λλ§λ€ μλ‘μ΄ μ€μ½νκ° μμ±λλ©°, ν¨μ λ΄μμ μ μΈλ λ³μλ ν΄λΉ ν¨μ λ΄μμλ§ μ κ·Όν μ μμ΅λλ€.
function exampleFunction() { let localVar = 'I am a local variable'; // ν¨μ μ ν¨λ²μμ μν λ³μ if (true) { let blockVar = 'I am a block-scoped variable'; // λΈλ‘ μ ν¨λ²μμ μν λ³μ console.log(localVar); // ν¨μ μ ν¨λ²μ λ΄μμ μ κ·Ό κ°λ₯ console.log(blockVar); // λΈλ‘ μ ν¨λ²μ λ΄μμ μ κ·Ό κ°λ₯ } console.log(localVar); // ν¨μ μ ν¨λ²μ λ΄μμ μ κ·Ό κ°λ₯ console.log(blockVar); // Error: λΈλ‘ μ ν¨λ²μλ₯Ό λ²μ΄λ κ³³μμλ μ κ·Ό λΆκ°λ₯ }
μ μμ μμ localVarλ ν¨μ μ ν¨λ²μ λ΄μμ μ μΈλμ΄ ν¨μ μ 체μμ μ κ·Ό κ°λ₯ν©λλ€. νμ§λ§ blockVarλ λΈλ‘ λ΄μμλ§ μ ν¨ν λ³μμ΄λ―λ‘ λΈλ‘ μΈλΆμμλ μ κ·Όν μ μμ΅λλ€.
μμ½νλ©΄, μ΄νμ μ ν¨λ²μλ μ½λλ₯Ό μμ±νλ μμ μ λ³μμ μ€μ½νκ° κ²°μ λλ©°, ν¨μ μ ν¨λ²μλ ν¨μκ° μ€νλ λ μμ±λλ μ€μ½νμ λλ€. ν¨μ μ ν¨λ²μλ μ΄νμ μ ν¨λ²μλ₯Ό λ°λ₯΄κΈ° λλ¬Έμ ν¨μκ° μ΄λμ μ μΈλμλμ§μ λ°λΌ μ€μ½νκ° κ²°μ λ©λλ€.
μμ½νλ©΄, μ΄νμ μ ν¨λ²μλ μ½λλ₯Ό μμ±νλ μμ μ λ³μμ μ€μ½νκ° κ²°μ λλ©°, ν¨μ μ ν¨λ²μλ ν¨μκ° μ€νλ λ μμ±λλ μ€μ½νμ λλ€. ν¨μ μ ν¨λ²μλ μ΄νμ μ ν¨λ²μλ₯Ό λ°λ₯΄κΈ° λλ¬Έμ ν¨μκ° μ΄λμ μ μΈλμλμ§μ λ°λΌ μ€μ½νκ° κ²°μ λ©λλ€.