# const & let
const์ let ์์ฝ์ด๋ ES6์์ ์ฌ์ฉํ๋ ๋ณ์ ์ ์ธ ๋ฐฉ์์ ๋๋ค.
# let
let ์์ฝ์ด๋ ํ๋ฒ ์ ์ธํ๋ฉด ๋ค์ ์ ์ธํ ์ ์์ต๋๋ค.
// ๋๊ฐ์ ๋ณ์๋ฅผ ์ฌ์ ์ธํ ๋ ์ค๋ฅ
let a = 10;
let a = 20; // Uncaught SyntaxError: Identifier 'a' has already been declared
# const
const ์์ฝ์ด๋ ํ๋ฒ ํ ๋นํ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
// ๊ฐ์ ๋ค์ ํ ๋นํ์ ๋ ์ค๋ฅ
const a = 10;
a = 20; // Uncaught TypeError: Assignment to constant variable.
๋จ, ๊ฐ์ฒด {}
๋๋ ๋ฐฐ์ด []
๋ก ์ ์ธํ์ ๋๋ ๊ฐ์ฒด์ ์์ฑ(property)๊ณผ ๋ฐฐ์ด์ ์์(element)๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
// ๊ฐ์ฒด๋ก ์ ์ธํ๊ณ ์์ฑ ๊ฐ์ ๋ณ๊ฒฝ
const b = {
num: 10,
text: 'hi'
};
console.log(b.num); // 10
b.num = 20;
console.log(b.num); // 20
// ๋ฐฐ์ด๋ก ์ ์ธํ๊ณ ๋ฐฐ์ด ์์๋ฅผ ์ถ๊ฐ
const c = [];
console.log(c); // []
c.push(10);
console.log(c); // [10]
# ๋ธ๋ก ์ ํจ๋ฒ์
ES5์ var๋ฅผ ์ด์ฉํ ๋ณ์ ์ ์ธ ๋ฐฉ์๊ณผ let & const๋ฅผ ์ด์ฉํ ๋ณ์ ์ ์ธ ๋ฐฉ์์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ธ๋ก ์ ํจ๋ฒ์์ ๋๋ค.
# var์ ์ ํจ ๋ฒ์
var์ ์ ํจ ๋ฒ์๋ ํจ์์ ๋ธ๋ก ๋จ์๋ก ์ ํ๋ฉ๋๋ค. ํํ ํจ์ ์ค์ฝํ(function scope)๋ผ๊ณ ํํํฉ๋๋ค.
var a = 100;
function print() {
var a = 10;
console.log(a);
}
print(); // 10
print ํจ์ ์์ ์ ์ธํ a
์ print ํจ์ ์์ ์ ์ธํ a
๋ ๊ฐ์ ๋ค๋ฅธ ์ ํจ ๋ฒ์๋ฅผ ๊ฐ์ต๋๋ค.
var a = 100;
๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ ์ญ ๊ฐ์ฒด์ธ window์ ์ถ๊ฐ๊ฐ ๋๊ณ var a = 10;
๋ print()
ํจ์ ์์์๋ง ์ ํจํ ๋ฒ์๋ฅผ ๊ฐ์ต๋๋ค.
# for ๋ฐ๋ณต๋ฌธ์์์ var ์ ํจ ๋ฒ์
์์ ์์ ๋ฅผ ๋ณด๋ค๋ณด๋ฉด ํํ ํท๊ฐ๋ฆด ์ ์๋ ๋ถ๋ถ์ด "var์ ์ ํจ ๋ฒ์๊ฐ {}์ ์ ํ๋๋?" ์ ๋๋ค. ์๋ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
var a = 10;
for (var a = 0; a < 5; a++) {
console.log(a); // 0 1 2 3 4 5
}
console.log(a); // 6
var a = 10;
๋ก ๋ณ์ a๋ฅผ ์ ์ธํ ์ํ์์ for ๋ฐ๋ณต๋ฌธ์ ๋์ผํ ๋ณ์ ์ด๋ฆ a๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด {}
์ผ๋ก ๋ณ์์ ์ ํจ ๋ฒ์๊ฐ ์ ํ๋์ง ์๊ธฐ ๋๋ฌธ์ for ๋ฐ๋ณต๋ฌธ์ด ๋๋๊ณ ๋์ console.log(a);
๋ฅผ ์ถ๋ ฅํ๋ฉด for ๋ฐ๋ณต๋ฌธ์ ๋ง์ง๋ง ๊ฒฐ๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค. ์๋ง ์๋ฐ๋ ๋ค๋ฅธ ์ธ์ด์ ๊ฐ๋ฐ์๋ค์๊ฒ๋ ์ด ๋ถ๋ถ์ด ๊ฐ์ฅ ํท๊ฐ๋ฆด ๊ฒ์
๋๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ณ ๋ค๋ฅธ ์ธ์ด์ ํต์ผ๊ฐ์ ์ฃผ๊ธฐ ์ํด ES6์์๋ const์ let์ ๋ณ์ ์ ํจ ๋ฒ์๋ฅผ ๋ธ๋ก{}
์ผ๋ก ์ ํํ์์ต๋๋ค.
# const์ let์ ๋ธ๋ก ์ ํจ๋ฒ์
์ด๋ฒ์ ์ ๋ฐ๋ณต๋ฌธ ์ฝ๋์ var ๋์ let์ ์ ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
var a = 10;
for (let a = 0; a < 5; a++) {
console.log(a); // 0 1 2 3 4 5
}
console.log(a); // 10
๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด ๋ณ์ a๋ฅผ let์ผ๋ก ์ ์ธํ๋ ๋ณ์์ ์ ํจ ๋ฒ์๊ฐ for ๋ฐ๋ณต๋ฌธ์ {} ๋ธ๋ก ์์ผ๋ก ์ ํ๋์์ต๋๋ค.
โ Closure Arrow Function โ