๐ var์ scope๋ ํจ์ ๋จ์์ด๊ณ , let, const์ scope๋ ๋ธ๋ก ๋จ์์ด๋ค.
scope๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ ์ ํจ ๋ฒ์๋ฅผ ๋งํ๋ค. ์ฝ๊ฒ ๋งํด, ๊ฐ์ ์ฌ์ฉํ ์ ์๋ ์ฝ๋ ์์ญ์ด๋ผ๊ณ ํ ์ ์๋ค.
์๋์ ์ฝ๋์์ if ๋ฌธ ์์์ ์๋ก์ด ๊ฐ์ ์ค์ ํ๋๋ฐ,
if ๋ฌธ ๋ฐ์ ์๋ message์ ๊ฐ์ด ์์ ๋์๋ค. var ์ฌ์ฉํ ์ฝ๋๋ ๊ฒฐ๊ตญ ์ค์ฝํ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํจ๋ค.
function printMessage() {
var message = "hello";
if (true) {
var message = "world!";
console.log(message);
// world!
}
console.log(message);
// world!
}
์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก let๊ณผ const์ด๋ค.
let๊ณผ const๋ ์ค์ฝํ๊ฐ ํจ์ ๋จ์๊ฐ ์๋ ๋ธ๋ก ๋จ์์ด๋ฏ๋ก,
if๋ฌธ ์์์ ์ ์ธํ message์ ๊ฐ์ if ๋ฌธ ๋ฐ์ message์ ๊ฐ์ ๋ณ๊ฒฝํ์ง ์๋๋ค.
function printMessage() {
let message = "hello";
if (true) {
let message = "world!";
console.log(message);
// world!
}
console.log(message);
// hello
}
๐ var๋ ์ค๋ณต์ผ๋ก ๋ณ์ ์ค์ ์ด ๊ฐ๋ฅํ์ง๋ง, let๊ณผ const๋ ๋ณ์๋ฅผ ์ค๋ณต์ผ๋ก ์ ์ธํ ์ ์๋ค.
var message = "hello";
var message = "wolrd!"; // ๊ฐ๋ฅ
var๋ ์์ ์ฝ๋์ฒ๋ผ ์ค๋ณต๋ ์ด๋ฆ์ผ๋ก ๋ณ์๋ฅผ ์ค์ ํ ์ ์๋ค. ์ค๋ณต๋ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ฒ์ ์ด๋ค ๋ฌธ์ ๋ฅผ ๋ง๋ค์ด ๋ผ์ง ์ ์ ์๋ค. ์ฌ์ฉํ๊ณ ์๋ ๊ฐ์ด ์ธ์ ๋ ๋ฐ๋ ์ ์๋ค๋ ์ด์ผ๊ธฐ์ด๋ค.
let๊ณผ const๋ ์ฌ์ฉํ ๋ ๊ฐ์ ๋ธ๋ก ๋ด๋ถ์์ ์ค๋ณต ์ ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ค.
let message = "hello";
let message = "hello wolrd!"; // Uncaught SyntaxError: Identifier 'message' has already been declared
๐ var, let์ ๊ฐ์ ๋ค์ ์ค์ ํ ์ ์์ง๋ง, const๋ ํ ๋ฒ๋ง ๊ฐ๋ฅํ๋ค.
const๋ ์์๋ก, ํ ๋ฒ๋ง ๊ฐ์ ์ค์ ํ ์ ์๋ค.
const message = "hello";
message = "hello wolrd!"; // Uncaught TypeError: Assignment to constant variable.
๐ ์ ๋ฆฌ
ES6 ๋ฌธ๋ฒ์์๋ var์ ์ฌ์ฉ์ ์ง์ํ๋ ๊ฒ ์ข๋ค. let๊ณผ const๊ฐ var๊ฐ ํ๋ ์ผ์ ํ ์ ์๋ค. let์ ๊ฐ์ด ์ ๋์ ์ผ๋ก ๋ณํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๊ณ , const๋ ํ๋ฒ ์ค์ ํ ํ ๋ณ๊ฒฝํ ์ผ์ด ์๋ ๊ฐ์ ์ฌ์ฉํ๋ค. ๊ฐ๋จํ ๋งํ๋ฉด const๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฌ์ฉํ๊ณ , ๊ฐ์ด ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด let์ ์ฌ์ฉํ๋ ๊ฒ ์ข๋ค.