
JavaScript: VanillaJs-DOM-#4-clouser
2022, Apr 13
λ³μμ κ°μμμκ³Ό μ μλ³μ
//var μ μΈ λ³μλ μ μ μΈ λ°©μμΌλ‘ μμ±λλ€.
//μ½λ μμμ λ°λΌ μνλ₯Ό μ΄ν΄λ³΄μ.
var a = 5; //ν€μλ : A
console.log(a); //ν€μλ : B
/*
μμ
1. A -> B : 5 μΆλ ₯
2. B -> A : undefined(=λ³μλ μ μΈνμΌλ κ°μ ν λΉνμ§ μμ μν. μ¦, μλ£νμ΄ μλ μν *nullμ λΉκ°μ΄ ν λΉλ μν(λΉκ°μ²΄))
κ·ΈλΌ μ undefined μΈκ°? μ°Έμ‘°λ³μλ λ§λ€μ΄μ‘μΌλ κ°μ΄ ν λΉλμ§ μμ μν. λ€μλ§ν΄ μμμ μν΄ κ°μ ν λΉλλ€.
*/
//μ μλ³μ(global)λ λμ μΈ λ°©μμΌλ‘ μμ±λλ€.
//varλ λ³μλ₯Ό μ μΈνλ ν€μλμ΄λ©° μλ΅ν΄λ μΆλ ₯μ΄ λλ©°, μ΄λ μ μκ°μ²΄λ‘ windowλ₯Ό νΈμΆνμ¬ μ μΈλλ€.
//ex)window.b μ΄λ° κ²½μ° μμλ₯Ό λ°κΎΈλ©΄ μλ¬κ° λμ¨λ€. (Uncaught ReferenceError: b is not defined)
b = "bμκ°μ
λλ€"; //ν€μλ : A
console.log(b); //ν€μλ : B
//μ μλ³μ window.d = 1; μ§μλ³μ var d = 2; μμ± ν κ° μ¦κ°
//μ΄λ λ³μμ κ°μ΄ μ¦κ°λ κΉ? => ν¨μ λ΄ μ°μ μμλ μ§μλ³μμ μλ€. *μμΉλ₯Ό λ³κ²½ν΄λ κ²°κ³Όλ λμΌ
var f1 = function(){
d = 1;
var d = 2;
d++;
return d;
};
console.log(f1());
//λμΌν λ³μλ₯Ό μ¬λ¬λ² μ μΈν΄λ μλ¬λ μμΌλ©° λ§μ§λ§ μ°Έμ‘°λ³μμ μ°Έμ‘°λ¨.
var e = 1;
var e = 2;
console.log("e : "+e);
//μ€κ΄νΈ λ΄ μ μΈλ λ³μλ λ°μμ μ¬μ©ν μ μλκ±΄λ° μλ°μ€ν¬λ¦½νΈλ μμΈ
//λ¨, ν¨μ λ΄ μ§μλ³μλ μ μΈ.
{ var f = 1; }
console.log("f : "+ f);
//ν¨μ μμμ μ μΈν local, global λ³μ
//μ§μλ³μλ defined λ
ΈμΆ, μ μλ³μλ μ μλ
ΈμΆ
function f2(){
var g = 1;
// g = 1; //μ μκ°μ²΄
// return g;
}
f2();
console.log("g : "+g);
//ν΄λ‘μ (clouser)
//JSλ ν¨μ λ΄ ν¨μ μ μΈκ°λ₯
//μλ°μ€ν¬λ¦½νΈλ ν¨μλ₯Ό μ μνμ§ μκ³ κ°μ²΄λ‘ λ§λ€μ΄ κ·Έ μμ²΄κ° μ μλ€ λΌκ³ μκ°νλ©΄ λλ€.
//ν¨μλ₯Ό κ°μ²΄λ‘ λ§λ€κΈ° λλ¬Έμ κ·Έ κ°μ²΄κ° λ°νλ μ μκ³ , ν¨μ λ΄ ν¨μκ° λ§λ€μ΄μ§ μ μκ³
//κ·Έλ¬λ€λ³΄λ ν¨μκ° κ°μ§κ³ μλ μ§μλ³μκ° ν΄λ‘μ λΌλ κ²μ λ³μ μ μλ€.
function f3(){
var h = 3;
f4();
function f4(){
var h = 4;
f5();
function f5(){
var h = 5;
}
}
}
console.log("f3 ν¨μ μμ");
f3();
// console.log("h : "+h);
function f6()
{//block start : μ§μλ³μμ μ ν¨λ²μ μμ
var i = 1;
return i;
}//block end : μ§μλ³μμ μ ν¨λ²μ λ
//f6 ν¨μκ° νΈμΆλκ³ ν¨μλ΄ μ§μλ³μiλ μ¬λΌμ§. μ¬κΈ°μ iμ λ³μλ νΈμΆν¨μ κ°μ μ°Έμ‘°νλ€.
var i = f6();
console.log("i : "+i);
/**
* κ·Έλ°λ° λ§μΌ μμ²λΌ κ°μ μ°Έμ‘°νλκ² μλλΌ ν¨μλ₯Ό μ°Έμ‘°νλ€λ©΄?
* 1.ν¨μf7 λ΄ μ§μλ³μ j κ°μ²΄λ₯Ό λ§λ€κ³ 1μ κ°μ μ°Έμ‘°νλλ‘ νλ€.
* 2.ν¨μf8μ 리ν΄νλλ‘νλ€. ν¨μλΈλ‘ λ
* 3.λ³μk κ°μ²΄λ₯Ό λ§λ€μ΄ f7ν¨μλ₯Ό μ°Έμ‘°νλλ‘ νλ€.
* 4.λ³μkλ ν¨μ κ°μ²΄λ₯Ό μ°Έμ‘°νλ―λ‘ ν¨μλ‘ νΈμΆμ΄ κ°λ₯νκ³ κ·Έ κ°μ j λ³μκ° μ°Έμ‘°νλλ‘ νλ€.
* λ¬Έμ λ μλκ°?
* 3λ²μμ λ³μkκ° f7ν¨μλ₯Ό μ°Έμ‘°νκ³ νΈμΆλμ΄ f7ν¨μλ f8ν¨μλ₯Ό 리ν΄νμΌλ μ§μλ³μ jλ₯Ό μμ νκ³ λλμΌνλ€.
* κ·Όλ° f8ν¨μκ° ν¨μ μ§μλ³μ jλ₯Ό μ°Έμ‘°νκ³ λ¦¬ν΄νλ €κ³ νλ€.
* f8μ΄ μ¬μ©μ 무μ λ°λΌ jλ₯Ό μμ ν΄μΌν μ§ μ μ§ν΄μΌν μ§ JSλ νλ¨ν΄μΌνλ€.
* κ²°λ‘ μ μμ λμ§ μκ³ μ μ§νλ€.
* μ΄λ f8μ f7μ ν΄λ‘μ ν¨μκ° λλ€.
* ν΄λ‘μ ν¨μλ μλνκ³ μ¬μ©νλ©΄ μ’μ§λ§ κ·Έλ μ§μμΌλ©΄ μμλλΉλ μλ¬λ₯Ό λ§λ€μ΄λΌ μ μλ€.
*/
function f7(){
var j = 1;
return function f8(){
return j;
}
}
var k = f7();
var j = k();
console.log("ν΄λ‘μ j : "+j);