λ€λ₯Έ ν¨μ λ΄λΆμ μ μλ ν¨μ(innerFunction)κ° μλ κ²½μ°
μΈλΆ ν¨μ(outerFunction)κ° μ€νμ μλ£νκ³ ν΄λΉ λ³μκ°
ν΄λΉ ν¨μ μΈλΆμμ λ μ΄μ μ‘μΈμ€ ν μ μλ κ²½μ°μλ
ν΄λΉ λ΄λΆ ν¨μλ μΈλΆ ν¨μμ λ³μ λ° λ²μμ μ‘μΈμ€ ν μ μμ
function outerFunction(outerVariable) {
return function innerFunction(innerVariable) {
console.log('Outer function: ' + outerVariable);
console.log('Inner function: ' + innerVariable);
}
}
const newFunction = outerFunction('outside');
newFunction('inside');
...
let a = 'a'; // β
μ μ λ³μ
function functionB() {
let c = 'c';
console.log(a, b, c); // β bλ μ¬κΈ°μ μ μλ μ μμ β μλ¬
}
function functionA() {
let b = 'b'; // β
functionA μμμλ§ μΈ μ μμ
console.log(a, b); // ok, μΆλ ₯ : a b
functionB(); // μ¬κΈ°μ functionB μ€ν!
}
functionA();

functionB()λfunctionA()μμ
"μ μ"λ κ² μλλΌ κ·Έλ₯ "νΈμΆ"λ§ λ κ±°μ
π functionBμ μ€μ½νλ μ€μ§ μκΈ° μμ + μ μ λ³μλ§ μ κ·Ό κ°λ₯β
bλ functionA μμμλ§ μΈ μ μλ μ§μ λ³μλΌ
functionBμμλ 보μ΄μ§ μμπ ν΅μ¬ ν¬μΈνΈ
μλ°μ€ν¬λ¦½νΈλ "ν¨μλ₯Ό μ΄λμ νΈμΆνλκ°"κ° μλλΌ,
"μ΄λμ μ μνλκ°"μ λ°λΌ μ€μ½νκ° κ²°μ λ¨π€©
π
let a = 'a'; // β
μ μ λ³μ
function functionA() {
let b = 'b'; // β
functionAμ μ§μ λ³μ
function functionB() {
let c = 'c'; // β
functionBμ μ§μ λ³μ
console.log(a, b, c); // β
λͺ¨λ μ κ·Ό κ°λ₯!
}
console.log(a, b); // μΆλ ₯: a b
functionB(); // μΆλ ₯: a b c
}
functionA();
a b
a b c