ES5๊น์ง var
ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์๋์ ๊ฐ์ ํน์ง์ด ์๋ค. ํ์ง๋ง ์ด๋ ๋ค๋ฅธ ์ธ์ด์๋ ๋ค๋ฅธ ํน์ง์ผ๋ก ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ์์ผ๋ฉด ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค.
-
ํจ์ ๋ ๋ฒจ ์ค์ฝํ(Function-level Scope)
- ํจ์์ ์ฝ๋ ๋ธ๋ก๋ง ์ค์ฝํ ์ธ์ . ๋ฐ๋ผ์ ์ ์ญ ํจ์ ์ธ๋ถ์์ ์์ฑํ ๋ณ์๋ ๋ชจ๋ ์ ์ญ ๋ณ์์ด๋ค. ์ด๋ ์ ์ญ ๋ณ์๋ฅผ ๋จ๋ฐํ ๊ฐ๋ฅ์ฑ์ ๋์ธ๋ค.
- for ๋ฌธ์ ๋ณ์ ์ ์ธ๋ฌธ์์ ์ ์ธํ ๋ณ์๋ฅผ for ๋ฌธ์ ์ฝ๋ ๋ธ๋ก ์ธ๋ถ์์ ์ฐธ์กฐํ ์ ์๋ค.
-
var ํค์๋ ์๋ต ํ์ฉ
- ์๋ฌต์ ์ ์ญ ๋ณ์๋ฅผ ๋จ๋ฐํ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
-
๋ณ์ ์ค๋ณต ์ ์ธ ํ์ฉ
- ์๋ํ์ง ์์ ๋ณ์๊ฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ํผ๋์ ๋์ผ ์ ์๋ค.
-
๋ณ์ ํธ์ด์คํ
- ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ด์ ์ ์ฐธ์กฐํ ์ ์๋ค.
ES6๋ ์ด๋ฌํ var
ํค์๋์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด let
๊ณผ const
ํค์๋๋ฅผ ๋์
ํ์๋ค.
1. let
1.1 ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ
๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ(Block-level Scope)๋ฅผ ๋ฐ๋ฅด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์ ๋ ๋ฒจ ์ค์ฝํ(Function-level Scope)๋ฅผ ๋ฐ๋ฅธ๋ค.
ํจ์๋ ๋ฒจ์ค์ฝํ(Function-level Scope)
ํจ์ ๋ด์ ์ ์ธ๋ ๋ณ์๋ ํจ์ ๋ด์ ์ ๋ง ์ ํจ. ํจ์ ์ธ๋ถ์์๋ ์ฐธ์กฐํ ์ ์๋ค.
์ฆ, ํจ์ ๋ด๋ถ์์ ์ ์ธํ ๋ณ์๋ ์ง์ญ๋ณ์์ด๋ฉฐ, ํจ์ ์ธ๋ถ์์ ์ ์ธํ ๋ณ์๋ ๋ชจ๋ ์ ์ญ๋ณ์์ด๋ค.
๋ธ๋ก๋ ๋ฒจ์ค์ฝํ(Block-level Scope)
๋ชจ๋ ์ฝ๋๋ธ๋ก(ํจ์, if ๋ฌธ, for ๋ฌธ, while ๋ฌธ, try/catch๋ฌธ ๋ฑ) ๋ด์์ ์ ์ธ๋ ๋ณ์๋ ์ฝ๋ ๋ธ๋ก ๋ด์์๋ง ์ ํจํ๋ฉฐ, ์ฝ๋ ๋ธ๋ก ์ธ๋ถ์์๋๋ ์ฐธ์กฐํ ์ ์๋ค.
์ฆ, ์ฝ๋ ๋ธ๋ก๋ด๋ถ์์ ์ ์ธํ ๋ณ์๋ ์ง์ญ๋ณ์์ด๋ค.
์์ ๋ฅผ ์ดํด๋ณด์.
var foo = 123; // ์ ์ญ๋ณ์(1)
consolelog(foo); // 123
{
var foo = 456; // ์ ์ญ๋ณ์(2)
}
console.log(foo); // 456
๋ธ๋ก๋ ๋ฒจ์ค์ฝํ๋ฅผ ๋ฐ๋ฅด์ง ์๋ var
ํค์๋์ ํน์ฑ ์, ์ฝ๋ ๋ธ๋ก ๋ด์ ๋ณ์ foo
๋ ์ ์ญ๋ณ์์ด๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฏธ ์ ์ญ๋ณ์ foo
๊ฐ ์ ์ธ๋์ด์๊ณ var
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ ๋ณ์๋ ์ค๋ณต ์ ์ธ์ด ํ์ฉ๋๋ฏ๋ก ์์ ์ฝ๋๋ ๋ฌธ๋ฒ์ ์ผ๋ก ๋ฌธ์ ๊ฐ ์๋ค.
๋จ, ์ฝ๋ ๋ธ๋ก ๋ด์ ๋ณ์ foo(2)
๋ ์ ์ญ๋ณ์์ด๊ธฐ ๋๋ฌธ์ ์ ์ญ์์ ์ ์ธ๋ ์ ์ญ๋ณ์ foo(1)
์ ๊ฐ 123
์ ์๋ก์ด 456
์ผ๋ก ์ฌํ ๋นํ์ฌ ๋ฎ์ด์ด๋ค.
let foo = 123; // ์ ์ญ๋ณ์
{
let foo = 456; // ์ง์ญ๋ณ์
const bar = 456; // ์ง์ญ๋ณ์
}
console.log(foo); // 123
console.log(bar); // ReferenceError: bar is not defined
let
ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ๋ธ๋ก๋ ๋ฒจ์ค์ฝํ๋ฅผ ๋ฐ๋ฅธ๋ค.
์ฝ๋๋ธ๋ก๋ด์ ์ ์ธ๋ ๋ณ์ foo
๋ ๋ธ๋ก๋ ๋ฒจ์ค์ฝํ๋ฅผ ๊ฐ๋ ์ง์ญ๋ณ์์ด๋ค. ์ ์ญ์์ ์ ์ธ๋ ๋ณ์ foo
์๋ ๋ค๋ฅธ ๋ณ๊ฐ์ ๋ณ์์ด๋ค. ๋ํ ๋ณ์ bar
๋ ๋ธ๋ก๋ ๋ฒจ์ค์ฝํ๋ฅผ ๊ฐ๋ ์ง์ญ๋ณ์์ด๋ค. ๋ฐ๋ผ์ ์ ์ญ์์๋ ๋ณ์ bar
๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
1.2 ๋ณ์ ์ค๋ณต ์ ์ธ ๊ธ์ง
var
ํค์๋๋ก๋ ๋์ผํ ์ด๋ฆ์ ๊ฐ๋ ๋ณ์๋ฅผ ์ค๋ณตํด์ ์ ์ธํ ์ ์์๋ค.
ํ์ง๋ง let
ํค์๋๋ ๋์ผํ ์ด๋ฆ ๊ฐ๋ ๋ณ์๋ฅผ ์ค๋ณตํด์ ์ ์ธํ ์ ์๋ค. ๋ณ์๋ฅผ ์ค๋ณต์ ์ธํ๋ฉด ๋ฌธ๋ฒ์๋ฌ(SyntaxError)๊ฐ ๋ฐ์.
var foo = 123;
var foo = 456; // ์ค๋ณต์ ์ธํ์ฉ
let bar = 123;
let bar = 456; // ๋ฌธ๋ฒ์๋ฌ
1.3 ํธ์ด์คํ
ํธ์ด์คํ
(Hoisting)์ด๋ var
์ ์ธ๋ฌธ์ด๋ function์ ์ธ๋ฌธ ๋ฑ์ ํด๋น ์ค์ฝํ์ ์ ๋๋ก ์ฎ๊ธด ๊ฒ์ฒ๋ผ ๋์ํ๋ ํน์ฑ์ ๋งํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ES6์์ ๋์
๋ let
, const
๋ฅผ ํฌํจํ์ฌ ๋ชจ๋ ์ ์ธ์ ํธ์ด์คํ
ํ๋ค.
ํ์ง๋ง var
ํค์๋๋ก ์ ์ธ๋ ๋ณ์์ ๋ฌ๋ฆฌ let
ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ฅผ ์ ์ธ๋ฌธ ์ด์ ์ ์ฐธ์กฐํ๋ฉด ์ฐธ์กฐ์๋ฌ(ReferenceError)๊ฐ ๋ฐ์.
์ด๋ let
ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์ค์ฝํ์ ์์์์ ๋ณ์์ ์ ์ธ๊น์ง ์ผ์์ ์ฌ๊ฐ์ง๋(Temporal Dead Zone;TDZ)์ ๋น ์ง๊ธฐ ๋๋ฌธ.
console.log(foo); // undefined
var foo;
console.log(bar); // Error: Uncaught ReferenceError: bar is not defined
let bar;
๋ณ์๊ฐ ์ด๋ป๊ฒ ์์ฑ๋๋ฉฐ ํธ์ด์คํ ์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ์ดํด๋ณด์.
๋ณ์๋ 3๋จ๊ณ์ ๊ฑธ์ณ ์์ฑ๋๋ค.
์ ์ธ๋จ๊ณ (Declaration phase)
๋ณ์๋ฅผ ์คํ ์ปจํ ์คํธ์ ๋ณ์๊ฐ์ฒด(variable Object)์ ๋ฑ๋ก. ์ด ๋ณ์๊ฐ์ฒด๋ ์ค์ฝํ๊ฐ ์ฐธ์กฐํ๋ ๋์์ด ๋๋ค.
์ด๊ธฐํ๋จ๊ณ (Initialization phase)
๋ณ์๊ฐ์ฒด(variable Object)์ ๋ฑ๋ก๋ ๋ณ์๋ฅผ ์ํ ๊ณต๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ณด. ์ด ๋จ๊ณ์ ๋ณ์๋ undefined๋ก ์ด๊ธฐํ.
ํ ๋น๋จ๊ณ (Assignment phase)
undefined๋ก ์ด๊ธฐํ๋ ๋ณ์์ ์ค์ ๊ฐ์ ํ ๋นํ๋ค.
var
ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์ ์ธ๋จ๊ณ์ ์ด๊ธฐํ๋จ๊ณ๊ฐ ํ๋ฒ์ ์ด๋ฃจ์ด์ง๋ค.
์ฆ, ์ค์ฝํ์ ๋ณ์๋ฅผ ๋ฑ๋ก(์ ์ธ๋จ๊ณ)ํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ๋ณ์๋ฅผ ์ํ ๊ณต๊ฐ์ ํ๋ณดํ ํ, undefined๋ก ์ด๊ธฐํ(์ด๊ธฐํ๋จ๊ณ) ํ๋ค.
๋ฐ๋ผ์ ๋ณ์ ์ ์ธ๋ฌธ ์ด์ ์ ๋ณ์์ ์ ๊ทผํ์ฌ๋ ์ค์ฝํ์ ๋ณ์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ๋ค๋ง undefined๋ฅผ ๋ฐํํ๋ค. ์ดํ ๋ณ์ํ ๋น๋ฌธ์ ๋๋ฌํ๋ฉด ๊ฐ์ด ํ ๋น๋๋ค.
์ด๋ฌํ ํ์์ ๋ณ์ํธ์ด์คํ (Variable Hoisting)์ด๋ผ ํ๋ค.
// ์ค์ฝํ์ ์ ๋์์ ์ ์ธ๋จ๊ณ์ ์ด๊ธฐํ๋จ๊ณ๊ฐ ์คํ๋๋ค.
// ๋ฐ๋ผ์ ๋ณ์์ ์ธ๋ฌธ ์ด์ ์ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
console.log(foo); // undefined
var foo;
console.log(foo); // undefined
foo = 1; // ํ ๋น๋ฌธ์์ ํ ๋น๋จ๊ณ๊ฐ ์คํ.
console.log(foo); // 1
let
ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์ ์ธ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋ถ๋ฆฌ๋์ด ์งํ๋๋ค.
์ฆ, ์ค์ฝํ์ ๋ณ์๋ฅผ ๋ฑ๋ก(์ ์ธ๋จ๊ณ)ํ์ง๋ง ์ด๊ธฐํ ๋จ๊ณ๋ ๋ณ์ ์ ์ธ๋ฌธ์ ๋๋ฌํ์ ๋ ์ด๋ฃจ์ด์ง๋ค.
// ์ค์ฝํ์ ์ ๋์์ ์ ์ธ๋จ๊ณ๊ฐ ์คํ.
// ์์ง ๋ณ์๊ฐ ์ด๊ธฐํ(๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ํ๋ณด์ undefined๋ก ์ด๊ธฐํ)๋์ง ์์๋ค.
console.log(foo); // undefined
let foo; // ๋ณ์ ์ ์ธ๋ฌธ์์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ์คํ.
console.log(foo); // undefined
foo = 1; // ํ ๋น๋ฌธ์์ ํ ๋น๋จ๊ณ ์คํ.
console.log(foo); // 1
์ ์ธ๋จ๊ณ | ReferenceError | |
---|---|---|
์ผ์์ ์ฌ๊ฐ์ง๋(TDZ) | ReferenceError | |
let foo; | ์ด๊ธฐํ ๋จ๊ณ | foo === undefined |
foo = 1; | ํ ๋น๋จ๊ณ | foo === 1 |
๊ฒฐ๊ตญ ES6์์๋ ํธ์ด์คํ ์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ทธ๋ ์ง ์๋ค.
let foo = 1; // ์ ์ญ๋ณ์
{
console.log(foo); // ReferenceError: foo is not undefined
let foo = 2; // ์ง์ญ๋ณ์
}
ES6์ ์ ์ธ๋ฌธ๋ ์ฌ์ ํ ํธ์ด์คํ ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ์๋ฌ(ReferenceError)๊ฐ ๋ฐ์ํ๋ค.
ES6์ let
์ผ๋ก ์ ์ธ๋ ๋ณ์๋ ๋ธ๋ก๋ ๋ฒจ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ฏ๋ก ์ฝ๋ ๋ธ๋ก ๋ด์์ ์ ์ธ๋ ๋ณ์foo๋ ์ง์ญ๋ณ์์ด๋ค. (let foo = 2;
) ๋ฐ๋ผ์ ์ง์ญ๋ณ์foo๋ ํด๋น ์ค์ฝํ์์ ํธ์ด์คํ
๋๊ณ ์ฝ๋ ๋ธ๋ก์ ์ ๋๋ถํฐ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๋ ์ง์ ๊น์ง ์ผ์์ ์ฌ๊ฐ์ง๋(TDZ)์ ๋น ์ง๋ค.
๋ฐ๋ผ์ ์ ์ญ๋ณ์foo์ ๊ฐ์ด ์ถ๋ ฅ๋์ง ์๊ณ ์ฐธ์กฐ์๋ฌ(ReferenceError)๊ฐ ๋ฐ์ํ๋ค.
์ฝ๋๋ธ๋ก๋ด์ ํธ์ด์คํ ์ด ๋์ด
console.log(foo)
๋ฅผ ์ฝ์ง๋ง ์ผ์์ ์ฌ๊ฐ์ง๋์ ๋น ์ง๋ฏ๋ก ๋ ํผ๋ฐ์ค ์๋ฌ๊ฐ ๋ ๊ฒ์ด๋ค.์ง์ญ๋ณ์ ์๋์
console.log(foo);
๋ฅผ ํ์ธํ๋ฉด2
๊ฐ ์ถ๋ ฅ๋๋ค.
1.4 ํด๋ก์
๋ธ๋ก๋ ๋ฒจ์ค์ฝํ๋ฅผ ์ง์ํ๋ let
์ var
๋ณด๋ค ์ง๊ด์ ์ด๋ค.
var funcs = [];
// ํจ์์ ๋ฐฐ์ด์ ์์ฑํ๋ for ๋ฃจํ์ i๋ ์ ์ญ๋ณ์์ด๋ค.
for(var i = 0; i < 3; i++) {
funcs.push(function() { console.log(i); });
}
// ๋ฐฐ์ด์์ ํจ์๋ฅผ ๊บผ๋ด์ด ํธ์ถํ๋ค.
for(var j = 0; j < 3; j++) {
funcs[j]();
}
0, 1, 2๊ฐ ์ถ๋ ฅ๋๋๊ฒ์ด ์๋ 3์ด ์ธ ๋ฒ ์ถ๋ ฅ๋๋ค. ๊ทธ ์ด์ ๋ for ๋ฃจํ์ var i
๊ฐ ์ ์ญ ๋ณ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
var funcs = [];
// ํจ์์ ๋ฐฐ์ด์ ์์ฑํ๋ for ๋ฃจํธ์ i๋ ์ ์ญ๋ณ์์ด๋ค.
for(var i = 0; i < 3; i++) {
(function(index) { // index๋ ์์ ๋ณ์์ด๋ค.
funcs.push(function() { console.log(index); });
})(i);
}
// ๋ฐฐ์ด์์ ํจ์๋ฅผ ๊บผ๋ด์ด ํธ์ถํ๋ค.
for(var j = 0; j < 3; j++) {
funcs[j]();
}
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ ๋ฒจ์ค์ฝํ๋ก ์ธํ์ฌ for๋ฃจํ์ ์ด๊ธฐํ์์ ์ฌ์ฉ๋ ๋ณ์๊ฐ ์ ์ญ์ค์ฝํ๋ฅผ ๊ฐ๊ฒ ๋์ด 0,1,2๋ฅผ ์ถ๋ ฅํ ์ ์์๋ค. (ํด๋ก์ ํ์ฉ)
ES6์ let
ํค์๋๋ฅผ for๋ฃจํ์ ์ด๊ธฐํ์์ ์ฌ์ฉํ๋ฉด ํด๋ก์ ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ์ ์ฝ๋์ ๋์ผํ ๋์์ ํ๋ค.
var funcs = [];
// ํจ์์ ๋ฐฐ์ด์ ์์ฑํ๋ for๋ฃจํธ์ i๋ for๋ฃจํ์ ์ฝ๋ ๋ธ๋ก์์๋ง ์ ํจํ ์ง์ญ๋ณ์์ด๋ฉด์ ์์ ๋ณ์์ด๋ค.
for(let i = 0; i < 3; i++) {
funcs.push(function() { console.log(i); });
}
// ๋ฐฐ์ด์์ ํจ์๋ฅผ ๊บผ๋ด์ด ํธ์ถํ๋ค.
for(var j = 0; j < 3; j++) {
console.dir(funcs[j]);
funcs[j]();
}
for๋ฃจํ์ let i
๋ for loop์์๋ง ์ ํจํ ์ง์ญ๋ณ์์ด๋ค.
๋ํ, i
๋ ์์ ๋ณ์๋ก์ for๋ฃจํธ์ ์๋ช
์ฃผ๊ธฐ๊ฐ ์ข
๋ฃ๋์ด๋ ๋ณ์ i
๋ฅผ ์ฐธ์กฐํ๋ ํจ์๊ฐ ์กด์ฌํ๋ ํ ๊ณ์ ์ ์ง๋๋ค.
1.5 ์ ์ญ๊ฐ์ฒด์ let
์ ์ญ๊ฐ์ฒด(Global Object)๋ ๋ชจ๋ ๊ฐ์ฒด์ ์ ์ผํ ์ต์์ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค. ์ผ๋ฐ์ ์ผ๋ก Browser-side์์๋ window ๊ฐ์ฒด, Server-side(Node.js)์์๋ global ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ฅผ ์ ์ญ๋ณ์๋ก ์ฌ์ฉํ๋ฉด ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋๋ค.
var foo = 123; // ์ ์ญ๋ณ์
console.log(window.foo); // 123
let ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ฅผ ์ ์ญ๋ณ์๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ, let ์ ์ญ๋ณ์๋ ์ ์ญ๊ฐ์ฒด ํ๋กํผํฐ๊ฐ ์๋๋ค. ์ฆ, window.foo์ ๊ฐ์ด ์ ๊ทผํ ์ ์๋ค.
let ์ ์ญ๋ณ์๋ ๋ณด์ด์ง ์๋ ๊ฐ๋ ์ ์ธ ๋ธ๋ก ๋ด์ ์กด์ฌํ๊ฒ ๋๋ค.
let foo = 123; // ์ ์ญ๋ณ์
console.log(window.foo); // undefined
2. const
let
์ ์ฌํ ๋น์ด ๊ฐ๋ฅํ๋ const
๋ ์ฌํ ๋น์ด ๊ธ์ง๋ค.
const FOO = 123;
FOO = 456; // TypeError: Assignment to constant variable.
์ฃผ์ํ ์ ์
const
๋ ๋ฐ๋์ ์ ์ธ + ํ ๋น์ด ๊ฐ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค.
const FOO; // SyntaxError: Missing initializer in const declaration
๋ํ, const
๋ let
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ธ๋ก๋ ๋ฒจ์ค์ฝํ๋ฅผ ๊ฐ๋๋ค.
{
const FOO = 10;
console.log(FOO); // 10
}
console.log(FOO); // ReferenceError: FOO is not defined
2.2 ์์
์์๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ ํธ์๋ฅผ ์ํด ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
// 10์ ์๋ฏธ๋ฅผ ์๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ๊ฐ๋
์ฑ์ด ์ข์ง ์๋ค.
if(row > 10) {}
// ๊ฐ์ ์๋ฏธ๋ฅผ ๋ช
ํํ ๊ธฐ์ ํ์ฌ ๊ฐ๋
์ฑ์ด ํฅ์๋์๋ค.
const MAXROWS = 10;
if(rows > MAXROWS) {}
์กฐ๊ฑด๋ฌธ ๋ด์ 10์ ์ด๋ค ์๋ฏธ๋ก ์ฌ์ฉํ์๋์ง ํ์ ํ๊ธฐ ๊ณค๋ํ๋ค.
ํ์ง๋ง ๋ค์ด๋ฐ์ด ์ ์ ํ ์์๋ก ์ ์ธํ๋ฉด ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ํฅ์๋๋ค.
const
๋ ๊ฐ์ฒด์๋ ์ฌ์ฉ๊ฐ๋ฅํ๋ค. ์ด๋๋ ์ฌํ ๋น์ ๊ธ์ง๋๋ค.
const obj = { foo : 123 };
obj = { bar : 456 }; // TypeError: Assignment to constant variable.
2.3 const์ ๊ฐ์ฒด
const
๋ ์ฌํ ๋น์ด ๊ธ์ง๋๋ค.
์ด๋ const ๋ณ์์ ํ์ ์ด ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ, ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณ๊ฒฝํ์ง ๋ชปํ๋ค๋ ๊ฒ์ ์๋ฏธ. ํ์ง๋ง ์ด๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ณดํธ๋์ง ์๋๋ค.
์ฌํ ๋น์ ๋ถ๊ฐ๋ฅํ๋ ํ ๋น๋ ๊ฐ์ฒด์ ๋ด์ฉ(ํ๋กํผํฐ ์ถ๊ฐ, ์ญ์ , ํ๋กํผํฐ ๊ฐ ๋ณ๊ฒฝ)์ ๋ณ๊ฒฝ๊ฐ๋ฅํ๋ค.
const user = { name: 'Lee' };
// const ๋ณ์๋ ์ฌํ ๋น์ด ๊ธ์ง.
// user = {}; // TypeError: Assignment to constant variable.
// ๊ฐ์ฒด์ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์ ์๋ค.
user.name = 'Kim';
console.log(user); // { name: 'Kim' }
๊ฐ์ฒด์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ๊ฐ์ฒดํ์ ๋ณ์์ ํ ๋น๋ ์ฃผ์๊ฐ์ ๋ณ๊ฒฝ๋์ง ์๋๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒดํ์ ๋ณ์ ์ ์ธ์๋ const๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ง์ฝ์ ๊ฐ์ฒดํ์
๋ณ์์ ์ฃผ์๊ฐ์ ๋ณ๊ฒฝ(์ฌํ ๋น)ํ ๊ฒฝ์ฐ๋ let
์ ์ฌ์ฉํ๋ค.
3. var
vs let
vs const
๋ณ์ ์ ์ธ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก const
์ฌ์ฉํ๊ณ , let
์ ์ฌํ ๋น์ด ํ์ํ ๊ฒฝ์ฐ์ ํ์ ํด ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์์ ๊ฐ์ผ ๊ฒฝ์ฐ, ๊ฐ๊ธ์ const
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๋ฅผ ์ฌํ ๋นํ๋ ๊ฒฝ์ฐ๋ ์๊ฐ๋ณด๋ค ํํ์ง ์๊ธฐ ๋๋ฌธ์ const
ํค์๋๋ฅผ ์ฌ์ฉํด ์๋์น ์์ ์ฌํ ๋น์ ๋ฐฉ์งํด์ฃผ๋ฏ๋ก ์์ ํ๋ค.
- ES6๋ฅผ ์ฌ์ฉํ๋ค๋ฉด
var
ํค์๋๋ ์ฌ์ฉํ์ง ์๋๋ค. - ์ฌํ ๋น์ด ํ์ํ ๊ฒฝ์ฐ์ ํ์ ํด
let
ํค์๋๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ ๋ณ์์ ์ค์ฝํ๋ ์ต๋ํ ์ข๊ฒ ๋ง๋ ๋ค. - ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ง ์๋(์ฌํ ๋น์ด ํ์์๋ ์์)์์ ๊ฐ๊ณผ ๊ฐ์ฒด์๋
const
๋ฅผ ์ฌ์ฉํ๋ค.const
ํค์๋๋ ์ฌํ ๋น ๊ธ์งํ๋ฏ๋กvar
,let
๋ณด๋ค ์์ ํ๋ค.
๋ณ์๋ฅผ ์ ์ธํ๋ ์์ ์๋ ์ฌํ ๋น์ด ํ์ํ ์ง ์ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๋ ์์ธ๋ก ์ฌํ ๋นํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ฌผ๋ค.
๋ฐ๋ผ์ ๋ณ์๋ฅผ ์ ์ธํ ๋์๋ ์ผ๋จ cosnt
ํค์๋๋ฅผ ์ฌ์ฉํ์.
์ฌํ ๋น์ด ํ์ํ๋ค๋ฉด(๋ฐ๋์ ์ฌํ ๋น์ด ํ์ํ์ง ํ๋ฒ ์๊ฐํด๋ณด๊ธฐ) ๊ทธ๋ const
๋ฅผ let
ํค์๋๋ก ๋ณ๊ฒฝํด๋ ๋ฆ์ง ์๋ค.
Reference
'๐ฉ๐ปโ๐ปSTUDY > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] return์ด ํ๋ ์ผ (0) | 2021.11.26 |
---|---|
[JS] script async/defer (0) | 2021.10.22 |
[JavaScript] Call By Value (0) | 2021.01.29 |
[JavaScript] JavaScript ์ฝ์ ๋ฐฉ์๊ณผ ์์น (0) | 2020.09.24 |
[JavaScript] ๋ฌธ์์ ๋ก๋์์ - onload / DOMContentLoaded (0) | 2020.09.24 |