π λΈλ‘μ ν¨λ²μλ₯Ό λ°λ₯΄λ 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λ λΈλ‘ λ΄μμλ§ μ ν¨ν λ³μμ΄λ―λ‘ λΈλ‘ μΈλΆμμλ μ κ·Όν μ μμ΅λλ€.
μμ½νλ©΄, μ΄νμ μ ν¨λ²μλ μ½λλ₯Ό μμ±νλ μμ μ λ³μμ μ€μ½νκ° κ²°μ λλ©°, ν¨μ μ ν¨λ²μλ ν¨μκ° μ€νλ λ μμ±λλ μ€μ½νμ λλ€. ν¨μ μ ν¨λ²μλ μ΄νμ μ ν¨λ²μλ₯Ό λ°λ₯΄κΈ° λλ¬Έμ ν¨μκ° μ΄λμ μ μΈλμλμ§μ λ°λΌ μ€μ½νκ° κ²°μ λ©λλ€.
μμ½νλ©΄, μ΄νμ μ ν¨λ²μλ μ½λλ₯Ό μμ±νλ μμ μ λ³μμ μ€μ½νκ° κ²°μ λλ©°, ν¨μ μ ν¨λ²μλ ν¨μκ° μ€νλ λ μμ±λλ μ€μ½νμ λλ€. ν¨μ μ ν¨λ²μλ μ΄νμ μ ν¨λ²μλ₯Ό λ°λ₯΄κΈ° λλ¬Έμ ν¨μκ° μ΄λμ μ μΈλμλμ§μ λ°λΌ μ€μ½νκ° κ²°μ λ©λλ€.