์๋ฐ ์คํฌ๋ฆฝํธ - ๋ณ์
๐ ์๋ฐ์คํฌ๋ฆฝํธ ์๊ฐ
๋ณ์ ์ ์ธ์ 3๊ฐ์ง ๋ฐฉ๋ฒ.
var
๋ณ์์ ์ ์ธ, ๊ฐ์ ์ด๊ธฐํ.
let
๋ธ๋ก ๋ฒ์ ์ง์ญ ๋ณ์ ์ ์ธ, ๊ฐ์ ์ด๊ธฐํ.
const
๋ธ๋ก ๋ฒ์ ์ฝ๊ธฐ ์ ์ฉ ์์ ์ ์ธ.
ํด๋ก์ (closure)
- ๋ด๋ถํจ์๊ฐ ์ธ๋ถํจ์์ context์ ์ ๊ทผํ ์ ์๋ ๊ฒ์ ๊ฐ๋ฅดํจ๋ค.
function outter(){
var title = 'test';
function inner(){
console.log(title);
}
inner();
}
outter();
์ ์์ ์์ ๋ด๋ถํจ์(inner)
๊ฐ ์ธ๋ถํจ์(outter)
์ ์ง์ญ๋ณ์ title
์ ์ ๊ทผํ๊ฒ๊ณผ ๊ฐ๋ค.
- ์ธ๋ถํจ์์ ์ง์ญ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ด๋ถํจ์๊ฐ ์๋ฉธ๋ ๋๊น์ง ์๋ฉธ๋์ง ์๋ ํน์ฑ์ ๋งํ๋ค.
function outter(){
var title = 'test';
return function(){
alert(title);
}
}
inner = outter();
inner();
outter์ ํธ์ถ๊ฒฐ๊ณผ์ธ ์ต๋ช
ํจ์์ ๊ฒฐ๊ณผ๊ฐ ๋ณ์ inner์ ๋ด๊ธดํ, inner()
์ ์คํ์์ title
๋ณ์์ ๋ด๊ธด ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ์ด๊ฒ์ outter()์ด ์๋ inner()
์ ํธ์ถ ์ดํ ์๋ฉธ๋๋ค๋๊ฒ์ ์๋ฏธํ๋ค.
var arr = [];
for(var i=0; i<5; i++){
arr[i] = function(){
console.log(i);
}
}
for(var index in arr){
console.log(arr[index]());
}
์ ์์ ๋ ํด๋ก์ ์์ ์์ฃผ ์ผ์ด๋๋ ์ค์๋ก ๋ชจ๋ 5๊ฐ ๋ฆฌํด๋๋ค.
์ด๊ฒ์ i๊ฐ ์ธ๋ถํจ์์ ๋ณ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด
var arr = []
for(var i=0; i<5; i++){
arr[i] = function(id){
return function(){
return id;
}
}(i);
}
for(var index in arr){
console.log(arr[index]());
}
๋ด๋ถํจ์๊ฐ ์ธ๋ถํจ์์ ์ง์ญ๋ณ์ id๋ฅผ ์ฐธ์กฐํด ๋ฆฌํด๋๋ ํํ๋ฅผ ๋๊ธฐ ๋๋ฌธ์ 0๋ถํฐ 5์ ๊ฐ์ ๋ฆฌํดํ๋ค.