์ฌ๊ณผ
, ๋ฐ๋๋
๋ผ๋ ๊ฐ์ ์ปดํจํฐ์ ์ ์ฅํ๋ผ๊ณ ๋ช
๋ น์ ํ๋ค. ์ฌ๊ณผ
๋ผ๋ ๊ฐ์ ๋ค์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด, 2๋ฒ ์ฃผ์์ ์๋ ๊ฐ์ ์ฌ์ฉํ๋ฉด ๋๋ค. 2
์ ์ฌ๊ณผ
๋ ์ ํ ๊ด๋ จ์ด ์์์๋ ์ฌ๊ณผ
๋ผ๋ ๊ฐ์ ์ ๊ทผํ๊ธฐ ์ํด์๋ 2
๋ก ์ ๊ทผํด์ผํ๋ค. ์ฌ๊ณผ
๋ผ๋ ๊ฐ์ apple
์ด๋ผ๋ ๋ณ์๋ช
์ ์ค๋ค. ์ด๋ ๊ฒ ๋๋ฉด apple
์ด๋ผ๋ ๋ณ์๋ช
์ ํตํด ์ฌ๊ณผ
๋ผ๋ ๊ฐ์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค. ๋ณ์ ์ ์ธ : ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ๋ณด
๋ณ์ ํ ๋น : ํด๋น ๊ณต๊ฐ์ ์ฃผ์๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ณ์์ ๊ฐ์ ์ ์ฅ
๋ณ์ ์ฐธ์กฐ : ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ์ฝ์
var
๋ ์.. ์ด๋์?1๏ธโฃ var index = 0;
var sum = 0;
for (2๏ธโฃ var index = 1; index < 11; index++) {
sum = sum + index;
}
console.log(sum); // 55
console.log(index); // 11
for
๋ฌธ ์์์ index
๋ผ๋ ์ด๋ฆ๋ง ๊ฐ์ ๋ณ์(2๏ธโฃ)๋ฅผ ๋ฐ๋ณต๋ฌธ์ ์ํด ์ ์ธํด์คฌ์ ๋ฟ์ธ๋ฐ 1๏ธโฃ์ index์ ๊ฐ๋ ๋ณ๊ฒฝ๋์๋ค. ์ด๋ ์ ๋๋ฌธ์ผ๊น?var
์ ์ ์ฑ๊ธฐlet
๊ณผ const
์ ๋์
(์ด๋ var
์ ๋ฌธ์ ์ ๋๋ฌธ!)var
์ ๋ฌธ์ ์ var x = 1;
var y = 1;
var x = 100; // ์ฌ์ ์ธ ํ ๊ฐ ํ ๋น โญ๏ธ
var y; // ์ฌ์ ์ธ ํ ๋ ๊ฐ ํ ๋น โ
console.log(x); // 100
console.log(y); // 1
์ค๋ณต ์ ์ธ์ด ์ด์งธ์ ๋ฌธ์ ๊ฐ ๋ ๊น?
// 1. ๊ฐ๋ฐ์ A๋ ๋ณ์ x, y๋ฅผ ๋จผ์ ์ ์ธํ๋ค.
var x = 1;
var y = 1;
... ์๋ง์ค์ ์ฝ๋
// 2. ๊ฐ๋ฐ์ B๊ฐ ๋ค์ ๋ณ์ x, y๋ฅผ ์ ์ธํ๋ค.
var x = 100;
var y;
// 3. ์์์น ๋ชปํ ๊ฒฐ๊ณผ๊ฐ์ด ๋์ฌ ํ๋ฅ ์ฆ๊ฐ (A๋ฅ์ )
console.log(x);
console.log(y);
var x = 1;
if (true) {
var x = 100;
}
console.log(x); // 100
var
๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ค๋ณต์ ์ธ์ด ๊ฐ๋ฅํ๋ฏ๋ก x
๊ฐ ๋ค์ ์ ์ธ๋ ์ ์๊ณ ,
var
๊ฐ์ 1์ด ์๋ 100์ด ์ถ๋ ฅ๋์ด ๋ฒ๋ฆฐ๋ค.
if
๋ฌธ ๋ฟ๋ง ์๋๋ผ, for
๋ฌธ ๋ฑ ํจ์ ์ฝ๋ ๋ธ๋ก์ด ์๋ ๋ค๋ฅธ ์ฝ๋๋ธ๋ก์์ var
๋ณ์๋ฅผ ์ ์ธํ๋ฉด ์ ์ญ๋ณ์๊ฐ ๋๋ค.
ํจ์ ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ์๋์น ์๊ฒ ์ ์ญ๋ณ์๋ก ์ ์ธํด ์ค๋ณต ์ ์ธ๋ ํ๋ฅ ์ด ๋๋ค.
console.log
๋ณด๋ค ๋จผ์ ์คํํ๊ฒ ๋๋ค. apple
์ด ์ ์ธ๋์ง ์์ ์ฑ ์ฌ์ฉ๋๋ฏ๋ก ์ค๋ฅ๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์์ํ ์ ์๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํธ์ด์คํ
์ ์ํด apple
์ด ์ ์ธ๋๊ณ (var apple;
์ด ๋ฐ์ ์กด์ฌํ๋ฏ๋ก), undefined
๋ก ์ด๊ธฐํ๋ ์ํ์ด๋ค. ํธ์ด์คํ ์ ๋ฌธ์
- ๊ฐ๋ ์ฑ์ ํด์น๋ค.
- ์ ์ธ์ ์๋ ์๋ฌ๊ฐ ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ํ๋ฅ ์ด ๋์์ง๋ค.
let
๊ณผ const
๊ฐ ๋์
๋๊ตฌ๋?let
์ ํน์งlet ๊ณผ์ผ = '์ฌ๊ณผ';
let ๊ณผ์ผ = '๋ฐ๋๋'; // SyntaxError
let
์ ์ค๋ณต ์ ์ธ ํ์ฉ์ผ๋ก ์ธํ ํด๋จผ์๋ฌ๋ฅผ ๋ฐฉ์งํ๊ณ ์, ๋ณ์ ์ค๋ณต ์ ์ธ์ ๋ํด ๋ฌธ๋ฒ ์๋ฌ๋ฅผ ๋์ด๋ค. ("์ด๊ฑฐ ์ด๋ฏธ ์ฐ์ธ๊ฑฐ์ผ! ๋ค๋ฅธ ์ด๋ฆ ์จ!")
์ฐ์ ์ค์ฝํ๊ฐ ๋ญ๊น?
์ค์ฝํ
- ์๋ณ์๋ฅผ ์ฐพ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ธํ๋ ๋ฒ์
- ์์ ์ค์ฝํ์์๋ ํ์ ์คํฌํ์ ์ ๊ทผํ ์ ์์ง๋ง ๋ฐ๋๋ ๋ถ๊ฐ๋ฅ
function foo() { // local
let scope = 'local';
if (true) { // block
let scope = 'block';
console.log(scope);
}
console.log(scope);
}
// global
let scope = 'global';
foo();
console.log(scope);
// ์ถ๋ ฅ
// block
// local
// global
let ๊ณผ์ผ = '์ฌ๊ณผ';
function printFruit() {
let ๊ณผ์ผ = '๋ฐ๋๋';
console.log(๊ณผ์ผ); // ๋ฐ๋๋
}
console.log(๊ณผ์ผ); // ์ฌ๊ณผ
printFruit();
๋์ผํ ๋ณ์์ด๋ฆ์ ๊ฐ์ง์๋ ๋ถ๊ตฌํ๊ณ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋๋ ์ด์ ๋ let
์ด ์ฝ๋ ๋ธ๋ก์ ์ค์ฝํ๋ก ์ธ์ ํ๋ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ด๋ค.
์ฝ๋ ๋ธ๋ก : ํจ์, if๋ฌธ, for๋ฌธ ๋ฑ์ ์ฝ๋ ๋ธ๋ก {}
var
์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ํธ์ด์คํ
์ด ์ด๋ฃจ์ด์ ธ ์ ์ธ๋ฌธ์ด ๋งจ ์์ผ๋ก ๋์ด์ฌ๋ ค์ง๊ธฐ ๋๋ฌธ์ ์์ง ๋ณ์๊ฐ ์ ์ธ๋๊ธฐ ์ ์ธ๋ฐ๋ ์ค๋ฅ๊ฐ ๋์ง ์๊ณ undefined
๊ฐ ์ถ๋ ฅ๋๋ค.
ํ์ง๋ง let
์ ํธ์ด์คํ
์ด ์ด๋ฃจ์ด์ง์ง ์๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค.
์ฆ, var
์ ๋ฌ๋ฆฌ ์ ์ธํ์ง ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฌ๊ฐ ๋๋ค.
// var
console.log(๊ณผ์ผ); // undefined
var ๊ณผ์ผ;
// let
console.log(๊ณผ์ผ); // ์ฐธ์กฐ ์๋ฌ : ReferenceError
let ๊ณผ์ผ;
console.log(๊ณผ์ผ); // ์ ์ธ๋ง ํด์ฃผ์์ ๋๋ var์ ํธ์ด์คํ
๊ณผ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด์ ์ ์ธ๋์ด ์๋ ์ํ๋ก, undefined ์ถ๋ ฅ
var
์ let
์ ์์ค ํ๊ฐ ๊ณผ์ ์์ ์ด๋ค ์ฐจ์ด๊ฐ ์์๊น?undefined
๋ก ์ด๊ธฐํํ๋ค. var
: ๋ ๊ณผ์ ์ ์์ค ํ๊ฐ ๊ณผ์ ์์ ๋ชจ๋ ์ด๋ฃฌ๋ค. (์ ์ธ, ์ด๊ธฐํ ๋จ๊ณ)let
: ์ ์ธ ๋จ๊ณ์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ๋ถ๋ฆฌ๋์ด ์งํ๋๋ค. ์ผ์์ ์ฌ๊ฐ์ง๋ (TDZ)
let
์ ๋ณ์ ์ ์ธ๋ฌธ ์ ์์ ์ด๊ธฐํ ๋จ๊ณ๊ฐ ์ด๋ค์ง์ง ์์ผ๋ฏ๋ก ๊ทธ ์ ์ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ฉด ReferenceError๊ฐ ๋ฐ์ํ๊ณ , ์ ์ธ๋ฌธ ์ดํ์ ์ฐธ์กฐํ ๊ฒฝ์ฐ undefined๋ก ์ด๊ธฐํ๋ ์ํ์ด๋ฏ๋ก undefined๊ฐ ์ถ๋ ฅ๋๋ค.
์ด์ฒ๋ผ (์ค์ฝํ ์์ ์ง์ ~ ์ด๊ธฐํ ์์ ์ง์ )๊น์ง ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ ๊ตฌ๊ฐ์ ์ผ์์ ์ฌ๊ฐ์ง๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
const
์ ํน์ง๊ธฐ๋ณธ์ ์ผ๋ก
let
์ ํน์ง์ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค.
const a; // SyntaxError
const
๋ ์์๋ฅผ ์ ์ธํ๊ธฐ ์ํด ๋ง๋ค์ด์ก๋ค๋ ๋ชฉ์ ์ฑ์ ๋ง๊ฒ ์ด๊ธฐํ๋ฅผ ํด์ฃผ์ง ์์ผ๋ฉด ๋ฌธ๋ฒ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
const a = 10;
a = 100; // TypeError
์๋ฐ์คํฌ๋ฆฝํธ์์์ ์์ ํน์ง
const
๋ก ๋ณ์๋ฅผ ์ ์ธํ๊ฒ ๋๋ค๋ฉด, ๋ณ์๊ฐ ์์ ๊ฐ์ด ์์์ ํน์ง์ ๊ฐ๊ฒ ๋์ด ์ ์ง๋ณด์ ์ธก๋ฉด์์ ์ ๋ฆฌํ๋ค. (์ฌ์ฉ์์๊ฒ ์ด๊ฒ์ ๋ณํ์ง ์์ ๊ฐ์ด๋ค๋ผ๋ ๊ฒ์ ๋ฏธ๋ฆฌ ์๋ ค์ค ์ ์๋ค.)
์ฃผ์ํด์ผ ํ ์ ์ const
๋ก ์ ์ธ๋ ๋ณ์๊ฐ ์์๊ฐ์ด ํ ๋น๋์๋ค๋ฉด ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, ์ฐธ์กฐ๊ฐ์ด ํ ๋น๋์ด ์๋ค๋ฉด ๋ด๋ถ ์์ฑ์ด ๋ณ๊ฒฝ๋ ์ ์๋ค. (๋ฌผ๋ก , ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.)
var
๋์ let
๊ณผ const
๋ฅผ ์ฌ์ฉํด์ผํ๋ ์ด์ ?