var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ค๋ณต ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
var x = 1;
var y = 1;
// var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ๊ฐ์ ์ค์ฝํ ๋ด์์ ์ค๋ณต ์ ์ธ์ ํ์ฉํ๋ค
// ์ด๊ธฐํ๋ฌธ์ด ์๋ ๋ณ์ ์ ์ธ๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด var ํค์๋๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
var x = 100;
// ์ด๊ธฐํ๋ฌธ์ด ์๋ ๋ณ์ ์ ์ธ๋ฌธ์ ๋ฌด์๋๋ค.
var y;
console.log(x); // 100
var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ค๋ก์ง ํจ์์ ์ฝ๋ ๋ธ๋ก๋ง์ ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํ๋ค. ๋ฐ๋ผ์ ํจ์ ์ธ๋ถ์์ var ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ฝ๋ ๋ธ๋ก ๋ด์์ ์ ์ธํด๋ ๋ชจ๋ ์ ์ญ ๋ณ์๊ฐ ๋๋ค.
var i = 10;
// for๋ฌธ์์ ์ ์ธํ i๋ ์ ์ญ ๋ณ์๋ค. ์ด๋ฏธ ์ ์ธ๋ ์ ์ญ ๋ณ์ i๊ฐ ์์ผ๋ฏ๋ก ์ค๋ณต ์ ์ธ๋๋ค.
for (var i = 0; i < 5; i++) {
console.log(i); // 0 1 2 3 4
}
// ์๋์น ์๊ฒ i ๋ณ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋์๋ค.
console.log(i); // 5
ํจ์ ๋ ๋ฒจ ์ค์ฝํ๋ ์ ์ญ ๋ณ์๋ฅผ ๋จ๋ฐํ ๊ฐ๋ฅ์ฑ์ ๋์ธ๋ค. ์ด๋ก ์ธํด ์๋์น ์๊ฒ ์ ์ญ ๋ณ์๊ฐ ์ค๋ณต ์ ์ธ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค.
var ํค์๋๋ก ๋ณ์๋ฅผ ์ ์ธํ๋ฉด ๋ณ์ ํธ์ด์คํ ์ ์ํด ๋ณ์ ์ ์ธ๋ฌธ์ด ์ค์ฝํ์ ์ ๋๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
let ํค์๋๋ก ์ด๋ฆ์ด ๊ฐ์ ๋ณ์๋ฅผ ์ค๋ณต ์ ์ธํ๋ฉด ๋ฌธ๋ฒ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๋ชจ๋ ์ฝ๋ ๋ธ๋ก(ํจ์,if๋ฌธ, for๋ฌธ, while๋ฌธ, try/catch ๋ฌธ ๋ฑ)์ ์ง์ญ ์ค์ฝํ๋ก ์ธ์ ํ๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๋ฐ๋ฅธ๋ค.
left foo = 1; // ์ ์ญ ๋ณ์
{
let foo = 2; // ์ง์ญ ๋ณ์
let bar = 3; // ์ง์ญ ๋ณ์
}
console.log(foo); // 1
console.log(bar); // ReferenceError : bar is not defined
var ํค์๋๋ก ์ ์ธํ ๋ณ์์ ๋ฌ๋ฆฌ let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๋ณ์ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ '์ ์ธ ๋จ๊ณ'์ '์ด๊ธฐํ ๋จ๊ณ'๊ฐ ๋ถ๋ฆฌ๋์ด ์งํ๋๋ค
์๋ฐ์คํฌ๋ฆฝํธ๋ ES6์์ ๋์ ๋ let, const๋ฅผ ํฌํจํด์ ๋ชจ๋ ์ ์ธ(var, let, const, function*, class ๋ฑ)์ ํธ์ด์คํ ํ๋ค.
๋จ, ES6์์ ๋์ ๋ let, const, class๋ฅผ ์ฌ์ฉํ ์ ์ธ๋ฌธ์ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
var ํค์๋๋ก ์ ์ธํ ์ ์ญ ๋ณ์์ ์ ์ญ ํจ์, ๊ทธ๋ฆฌ๊ณ ์ ์ธํ์ง ์์ ๋ณ์์ ๊ฐ์ ํ ๋นํ ์๋ฌต์ ์ ์ญ์ ์ ์ญ๊ฐ์ฒด window์ ํ๋กํผํฐ๊ฐ ๋๋ค. ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ ๋ window๋ฅผ ์๋ตํ ์ ์๋ค.
let ํค์๋๋ก ์ ์ธํ ์ ์ญ ๋ณ์๋ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ์๋๋ค.
const ํค์๋๋ ์์๋ฅผ ์ ์ธํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. const ํค์๋์ ํน์ง์ let ํค์๋์ ๋๋ถ๋ถ ๋์ผํ๋ฏ๋ก ๋ค๋ฅด์ ์ ์ค์ฌ์ผ๋ก ์ดํด๋ณด์/
const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ๋ฐ๋์ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํํด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
const foo; // SyntaxError : Missing initializer in const delaration
const ํค์๋๋ let๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ณ์ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
var ๋๋ let ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ฌํ ๋น์ด ์์ ๋ก์ฐ๋ const ํค์๋๋ก ์ ์ธํ ๋ณ์๋ ์ฌํ ๋น์ด ๊ธ์ง๋๋ค.
์์๋ ์ฌํ ๋น์ด ๊ธ์ง๋ ๋ณ์๋ฅผ ๋งํ๋ค. ์์๋ ์ํ ์ ์ง์ ๊ฐ๋ ์ฑ, ์ ์ง๋ณด์์ ํธ์๋ฅผ ์ํด ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
// ์ธ์จ์ ์๋ฏธํ๋ 0.1์ ๋ณ๊ฒฝํ ์ ์๋ ์์๋ก์ ์ฌ์ฉ๋ ๊ฐ์ด๋ค.
// ๋ณ์ ์ด๋ฆ์ ๋๋ฌธ์๋ก ์ ์ธํด ์์์์ ๋ช
ํํ ๋ํ๋ธ๋ค.
const TAX_RATE = 0.1;
// ์ธ์ ๊ฐ๊ฒฉ
let preTaxPrice = 100;
// ์ธํ ๊ฐ๊ฒฉ
let afterTaxPrice = preTaxPrice + (PreTaxPrice * TAX_RATE);
console.log(afterTaxPrice); // 110
const ํค์๋๋ก ์ ์ธ๋ ๋ณ์์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๊ฒฝ์ฐ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
const person = {
name: 'Lee'
};
// ๊ฐ์ฒด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ด๋ค. ๋ฐ๋ผ์ ์ฌํ ๋น ์์ด ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค
person.name = 'Kim';
console.log(person); // {name: "Kim"}
๋ณ์ ์ ์ธ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก const๋ฅผ ์ฌ์ฉํ๊ณ let์ ์ฌํ ๋น์ด ํ์ํ ๊ฒฝ์ฐ์ ํ์ ํด ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. const ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์น ์์ ์ฌํ ๋น์ ๋ฐฉ์งํ๊ธฐ ๋๋ฌธ์ ์ข ๋ ์์ ํ๋.
๋ณ์๋ฅผ ์ ์ธํ๋ ์์ ์๋ ์ฌํ ๋น์ด ํ์ํ์ง ์ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๋ ์์ธ๋ก ์ฌํ ๋นํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฌผ๋ค. ๋ฐ๋ผ์ ๋ณ์๋ฅผ ์ ์ธํ ๋๋ ์ผ๋จ const ํค์๋๋ฅผ ์ฌ์ฉํ์. ์ฌํ ๋น์ด ํ์ํ๋ค์ถ์ผ๋ฉด const ํค์๋๋ฅผ let ํค์๋๋ก ๋ณ๊ฒฝํด์ ์ฌ์ฉํ์.