'use strict';
์ด ์ฝ๋๋ฅผ ์คํฌ๋ฆฝํธ๋ ํจ์์ ์์ ๋ถ๋ถ์ ์ ์ธํ๊ณ strict ๋ชจ๋๋ก ๊ฐ๋ฐํ๋ค๋ฉด,
์๋์ผ๋ก ํ์ฉ๋๋ ์๋ชป๋ ์ฝ๋๋ฅผ ์ค๋ฅ๋ก ๋ณ๊ฒฝํ์ฌ (์กด์ฌํ์ง ์๋ ๋ณ์/๊ฐ์ฒด ๋ฑ์ ์ก์๋ด๋ ๋ฑ)
๋ชจ๋ ์ฝ๋๊ฐ strict ๋ชจ๋์์ ์คํ๋์ด ๋ถํ์ํ ์ค๋ฅ๋ฅผ ์๋ฐฉํ๊ณ ์ฑ๋ฅ ๊ฐ์ ๋ ๊ธฐ๋ํ ์ ์๋ค.
(* es5์์ ์ถ๊ฐ๋จ)
1. var
var x = "Hello world";
var x = 0;
//์ค๋ฅ์์ด ์๋ํ๋ค.
์ ์ธ+์ด๊ธฐํ -> ํ ๋น
์ด๋๋ ํธ์ด์คํ ์ด ๊ฐ๋ฅํ ์ ์ธ๋ฐฉ์์ด๋ค. block scope์ ์ ๋ถ ๋ฌด์ํ๊ณ function scope๋ฅผ ์ฌ์ฉํ๋ค. ๋ณ์๋ฅผ ์ด๋ ๊ณณ์์๋ ๋ถ๋ฌ์จ๋ค. ์ํ๋ถ๋ด์ด ํฌ๋ค.
๊ทธ๋ฌ๋ es6 ์ดํ ์๋ ์ ์ธ๋ฐฉ์์ด ๋์จ๋ค.
2. let
let x = "Hello world";
let x = 0;
// SyntaxError: 'x' has already been declared
์ ์ธ -> ์ด๊ธฐํ -> ํ ๋น
๋ณ์๊ฐ ์์ ๋ ์ ์๋ ๋ฐฉ์์ด๋ค. (mutable type)
let์ ํธ์ด์คํ ์ scope ๋จ์๋ก ์ด๋ฃจ์ด์ง๋ค.
let x = 30;
function showX(){
console.log(x);
let x = 10;
}
showX();
์ ์์์์ console.log(x)๋ TDZ(๋ณ์๊ฐ ํ ๋น๋๊ธฐ ์ ์ผ๋ก, ์ฌ์ฉ ๋ถ๊ฐํ ์์ญ)์ด๋ค.
hoisting์ ๋์์ผ๋ TDZ๊ฐ ๋ฐ์ํ์ฌ showX๋ 30๋ 10๋ ์ฐ์ง ์๊ฒ ๋๋ฏ๋ก,
showX๋ console.log(x)์์ ReferenceError๊ฐ ๋์ ์๋ํ์ง ์๋๋ค.
3. const
const x = "Hello world";
์ ์ธ + ์ด๊ธฐํ + ํ ๋น (๋์์)
const๋ ํ๋ฒ ํ ๋น๋ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. (immutable data type)
์ถ์ฒ : ๋๋ฆผ์ฝ๋ฉ https://www.youtube.com/@dream-coding / ์ฝ๋ฉ์๋ง https://www.youtube.com/@codingangma