
JavaScript: const, let
์ฐธ๊ณ ํ ๊ธ
ํ ์คํธ ํ๊ฒฝ
- ํ์ด์ดํญ์ค 47.0
const
const๋ ์๋ฐ์คํฌ๋ฆฝํธ 1.5 ์ดํ ๋ฒ์ ์์ ์ฌ์ฉ๊ฐ๋ฅํ ํค์๋๋ก, ์์๋ฅผ ์ ์ํ ๋ ์ฌ์ฉํ๋ฉฐ var ํค์๋๋ฅผ ๋์ฒดํ ์ ์๋ค.
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
const PI = 3.14;
const๋ ์ ํ์ ์ธ โ์์โ๋ต๊ฒ ์ ์ธ ์์ ์ ๋ฐ๋์ ์ด๊ธฐํ๋์ด์ผ ํ๋ฉฐ ์ ์ธ ์ดํ์ ํ ๋น์ ๋ฌด์๋๊ฑฐ๋ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
const ABC; // SyntaxError: missing = in const declaration, ์ด๊ธฐํ ํ์ํจ
const PI = 3.14; // ์ ์์ ์ธ ์ ์ธ
const PI = 3.14159265; // SyntaxError: redeclaration of const PI, ์ค๋ณต ์ ์ธ ๋ถ๊ฐ
PI = 3.141592; // TypeError: invalid assignment to const `PI', ์ฌํ ๋น ๋ถ๊ฐ
var PI = 3; // SyntaxError: redeclaration of const PI, ๊ฐ์ ์ด๋ฆ์ ๋ณ์ ์ ์ธ ๋ถ๊ฐ
const๋ ๊ฐ์ฒด ์ ์ธ์๋ ์ฌ์ฉํ ์ ์์ผ๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ณดํธ๋์ง ์๋๋ค:
const MY_OBJECT = {"key": "value"};
MY_OBJECT = {"OTHER_KEY": "value"}; // SyntaxError: redeclaration of const MY_OBJECT
MY_OBJECT.key = "otherValue";
console.debug(MY_OBJECT); // Object { key: "otherValue" }
๊ฐ์ฒด๋ฅผ ์์ ํ ๋ณดํธํ๊ณ ์ถ๋ค๋ฉด Object.freeze()
๋ฅผ ์ฌ์ฉํ ๊ฒ.
let
let์ ์๋ฐ์คํฌ๋ฆฝํธ 1.7(ES2015)๋ถํฐ ์ ๊ท ์ถ๊ฐ๋ ํค์๋๋ค. const์ ๋ง์ฐฌ๊ฐ์ง๋ก var๋ฅผ ๋์ฒดํ ์ ์๋ค.
let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];
let์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์๊ฐ ๊ฐ๋ ํจ์ ์ ํจ๋ฒ์๋ฅผ ๋ธ๋ก ์ ํจ๋ฒ์๋ก ์ ํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๊ฐ๋ น ๋ค์์ ๊ฒฝ์ฐ:
function fn() {
let a = 1;
{
let b = 2;
var w = 102;
}
console.debug(a); // 1
console.debug(w); // 102
console.debug(b); // ReferenceError: b is not defined
}
fn();
์ ํจ๋ฒ์๊ฐ ํจ์ ๋จ์์ธ var๋ฅผ ์ฌ์ฉํ ๋ณ์ w
๋ ๋ธ๋ก ๋ฐ์์๋ ์ฐธ์กฐ ๊ฐ๋ฅํ ๋ฐ๋ฉด, let์ ์ฌ์ฉํ์ฌ ์ ์ธ๋ ๋ณ์๋ ํด๋น ์ง์ญ์ ๊ฐ์ผ ๋ธ๋ก๊ณผ ๊ทธ ํ์์ ์ค์ฒฉ ๋ธ๋ก์์๋ง ์ ํจํ ๋ธ๋ก ๋จ์์ ์ ํจ๋ฒ์๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋ธ๋ก์ ๋ฒ์ด๋ ์ง์ญ์์๋ ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฅผ ํ์ฉํ๋ฉด ์ ์ด๋ฌธ์ ํํ์ ๋ด์์ ์์ฑ๋ ๋ณ์์ ์ ํจ๋ฒ์๋ฅผ ํด๋น ์ ์ด๋ฌธ ๋ด๋ก ์ ํํ ์ ์๋ค. ์๋ฅผ ๋ค์ด:
var arr = ['a', 'b', 'c'];
for (var ele1 in arr) {}
console.debug(arr[ele1]); // 'c'
for (let ele2 in arr) {}
console.debug(arr[ele2]); // ReferenceError: ele2 is not defined
let์ผ๋ก ์ ์ธ๋ ele2
๋ for๋ฌธ ๋ฐ์์ ์ฐธ์กฐํ ์ ์๋ค.
IE๋ 11๊ณผ edge์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ https://msdn.microsoft.com/en-us/library/s4esdbwz(v=vs.94).aspx