π Closure & Lexical & Scope
μμνμ§λ§, μκ³ λ³΄λ©΄ μ°λ¦¬ κ°κΉμ΄μ μλ ν΄λ‘μ Έ.
μλμ리λ₯Ό μμ보λλ‘ νκ² μ΅λλ€.
π‘ ν΄λ‘μ Έλ μ€μ½ν, λ μ컬μ€μ½ν, λ μ컬 νκ²½κ³Ό λ°μ ν κ΄κ³λ₯Ό κ°μ§κ³ μμ΅λλ€.
β¨ν΄λ‘μ λ μμ μ΄ μ μΈλ λΉμμ νκ²½μ κΈ°μ΅νλ ν¨μ
μ ν¨λ²μ
μ μμ€μ½ν, μ§μμ€μ½ν, μ μλ³μ, μ§μλ³μ
λ€ κ°μ§λ‘ ꡬλΆν
μ μ μ¬νμ μ€μ½ν
β μμ μ€μ½ν
λ‘λ§ μ κ·Ό κ°λ₯π μ μμ€μ½ν Global Scope | π μ§μμ€μ½ν Local Scope | |
---|---|---|
μ μΈ μμΉ | λΈλ‘ { } λ°κΉ₯ λλ ν¨μ λ°κΉ₯ μμ μ μΈ | λΈλ‘λ΄λΆ μμ μ μΈ |
μ¬μ© κ°λ₯ λ²μ | μ μ | λΈλ‘ λ΄λΆ |
λ³μ | π μ μλ³μλ₯Ό ν¬ν¨ Global Variable | π μ§μλ³μλ₯Ό ν¬ν¨ Local Variable |
π‘ μ μ μ€μ½νλ μ μ λ³μλ₯Ό κ°μ§λ©° μ΄λμλ μ κ·Όν μ μμ΅λλ€.
μ§μ μ€μ½νλ λΈλ‘ λ΄λΆμμ μ μΈλλ©° μ μΈ λ λ΄λΆμμλ§ μ κ·Όν μ μμ΅λλ€.
λΈλ‘λ 벨 μ€μ½ν | ν¨μλ 벨 μ€μ½ν |
---|---|
{ } μ€κ΄νΈ , μ€κ΄νΈ λ κ° μ¬μ΄ μ λ²μμμλ§ μ‘΄μ¬ | ν¨μλ 벨 μμ μ‘΄μ¬ |
let , const | var |
μ΄λ¦ | μ μ μ€μ½ν | λμ μ€μ½ν |
---|---|---|
κ²°μ λ°©μ | ν¨μκ° μ μ(μ μΈ) λλ μμ | ν¨μκ° νΈμΆ λλ μμ μ κ²°μ |
Eng | Lexical scope || Static scope | Dynamic scope |
<const x = 'Apple'; //πμ μμ€μ½ν
function outer() { //π μ§μμ€μ½ν
const x = 'kiwi'; //π μ§μμ€μ½ν
function inner() //π μ§μμ€μ½ν
{
console.log(x); //π μ§μμ€μ½ν
};
return inner; //π μ§μμ€μ½ν
};
const fruits = outer(); //πμ μμ€μ½ν
fruits(); //πμ μμ€μ½ν // 'kiwi'
fruits() // 'kiwi'
νμ
βμμ
|| λ΄λΆ
βμΈλΆ
λ°λμ κ²½μ° μ±λ¦½νμ§ μμ (μμ β νμ λΆκ°)
[μμ] μ μ μ€μ½ν | |
---|---|
x | 'Apple' |
β μ°Έμ‘°λ°©ν₯
[νμ] μ§μ μ€μ½ν | |
---|---|
x | 'Kiwi' |
ν¨μ λ΄λΆμ μ μΈλ x = 'kiwi'κ°μ μ§μ μ€μ½νμμ μ°Έμ‘°
νμκΈ° λλ¬Έμ
λλ€.
μ¦ λ΄λΆ ν¨μμμ κ°μ μ°ΎμκΈ°μ μ μ ν¨μλ‘ μ§ννμ§ μμ κ² μ
λλ€.
+ π€« μ μμμ xλ₯Ό νΈμΆνλ©΄ 'Apple'μ΄λΌλ κ°μ λ°μ μ μμ΅λλ€.
var x = 'λλ μ μ XμΌ';
function outer() {
var y = 'λλ outerν¨μμ μ§μ yμΌ';
console.log(x);
console.log(y);
function inner() {
var x = 'λλ innerν¨μμ μ§μ xμΌ';
console.log(x);
console.log(y);
}
inner();
}
outer();
console.log(x);
console.log(y);
//λλ μ μ XμΌ
//λλ outerν¨μμ μ§μ yμΌ
// λλ innerν¨μμ μ§μ xμΌ
// λλ outerν¨μμ μ§μ yμΌ
// λλ μ μ XμΌ
//https://www.youtube.com/watch?v=PVYjfrgZhtU
μ μ μ€μ½ν | |
---|---|
x | 'λλ μ μ XμΌ' |
outer | function obj |
β μ°Έμ‘°λ°©ν₯
outer μ§μ μ€μ½ν | |
---|---|
y | 'λλ outer ν¨μμ μ§μ yμΌ' |
inner | function obj |
β μ°Έμ‘°λ°©ν₯
inner μ§μ μ€μ½ν | |
---|---|
x | 'λλ inner ν¨μμ μ§μ yμΌ' |
μ μ μ€μ½νλ‘ μ κ·Ό var x = 'λλ μ μ xμΌ' κ°μ μ°Έμ‘°
'λλ outer ν¨μμ μ§μ yμΌ' λΌλ κ°μ μ°Έμ‘°
console.log(y) κ°μ undefined . μ μμμ λ΄λΆ μ€μ½νλ‘ μ§μ
ν μ μκΈ° λλ¬Έ
μ 보λ₯Ό λ΄κ³ μλ νκ²½
μμ λ μ컬 νκ²½μ λν μ°Έμ‘°λ₯Ό λ΄μ νλμ μλ£ κ΅¬μ‘°
let one;
one = 1;
function addOne(num){
console.log(one + num);
}
addOne(5); // 6
// https://www.youtube.com/watch?v=tpl2oXQkGZs
μ μ Lexical νκ²½ | |
---|---|
one | 1 |
addOne | funcion obj |
β μ°Έμ‘°λ°©ν₯ (λ°λμ λ°©ν₯ λΆκ°)
λ΄λΆ Lexical νκ²½ | |
---|---|
num | 5 |
κ°μ₯ ννκ² μΈκΈλλ ν΄λ‘μ Έ μμ
function outerFunction(outerVariavle) {
return function innerFunction(innerVariable) {
console.log("outerVariavle: " + outerVariavle);
console.log("innerVariable: " + innerVariable);
};
}
const newFunction = outerFunction("outside");
newFunction("inner");
//outerVariavle: outside
//innerVariable: inner
//https://www.youtube.com/watch?v=3a0I8ICR1Vg
"innerFunction(innerVariable)"μ λ°ν
ν©λλ€.μλ μ€μ ν outerVariable νλΌλ―Έν°('outside')λ₯Ό κΈ°μ΅νκ³ μ‘μΈμ€ν μ μλ€λ κ²μ
λλ€. λ°λΌμ console.logλ 'outside'μ 'inside'λ₯Ό λͺ¨λ μ¬μ©ν μ μλ€.
κΈ°μ΅
λμ΄ μ‘μΈμ€ ν μ μμ΅λλ€.
ν¨μ μ λ μ컬 νκ²½μ μ‘°ν©
μ λλ€.λ΄λΆ ν¨μκ° μλ©Έλ μΈλΆ ν¨μμ μ κ·Ό
ν λλ΄λΆ ν¨μλ₯Ό ν΄λ‘μ Έ
λΌκ³ ν©λλ€.
ν΄λ‘μ Έλ μλ©Έν ν¨μμλ μ κ·Όν μ μμμ λ»ν©λλ€. (λλΆλΆμ ν¨μλ 1ν μ€ν ν λ€μ μ κ·Όν μ μμ΅λλ€.)
λ―Έλμ κΈ°μ λ©΄μ μ μνμ¬ ν΄λ‘μ λ°νλ₯Ό μ€λΉνμ΅λλ€.
λ°ννλ κ³Όμ μμ λ©€λ²λ€ κ°μΈμ μΈμ΄λ‘ μ΄ν΄ν λ΄μ©μ 곡μ ν λ νμ€νκ² μ΄ν΄ν μ μλ μμ€ν κ²½νμ νμ΅λλ€.
μ μ μΈμ΄λ‘ νμ΄λΈ μ΄ ν¬μ€ν
μ΄ λ€λ₯Έ λΆλ€κ»λ λμμ΄ λκΈΈ λ°λλλ€!
λμ΄λκ° μλ 'ν΄λ‘μ μλν', 'ν΄λ‘μ λ°λ³΅λ¬Έ'μ λ΄μ§ λͺ»νμμ§λ§ κ°κΉμ΄ λ―Έλμ λ€μ μ λ‘λ νκ² μ΅λλ€!
3355 νμ΄ν ! λ μ’μ μκ·Ήμ μ£Όμ΄μ κ°μ¬ν΄μ.
μΆμ²