ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

javascript/๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

7. let + const

๋Œ•๋Œ•์ด๋ฐœ๐Ÿพ 2019. 1. 6. 15:40


์ด๋ฒˆ์— ์•Œ์•„๋ณผ ๋‚ด์šฉ์€ let๊ณผ const ์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜ ์„ ์–ธ ์‹œ์— ์“ฐ์ด๋Š” ํ‚ค์›Œ๋“œ์ธ๋ฐ ES6 ์ด์ „์—๋Š” var ๋ผ๋Š” ํ‚ค์›Œ๋“œ ํ•˜๋‚˜๋กœ๋งŒ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ์š”, ES6์—์„œ ๋“ฑ์žฅํ•œ let ๊ณผ const๋Š” ์–ด๋–ค์ ์—์„œ ๋‹ค๋ฅธ์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.



โ€ป let


let์€ ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ๋ธ”๋ก, ๊ตฌ๋ฌธ ๋˜๋Š” ํ‘œํ˜„์‹ ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค. ์ด๋Š” var ํ‚ค์›Œ๋“œ๊ฐ€ ๋ธ”๋ก ๋ฒ”์œ„๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ „์—ญ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜ ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์ ์ด๋‹ค. 


var ํ‚ค์›Œ๋“œ์™€ ๋น„๊ตํ•ด์„œ ์„ค๋ช…์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ๋Ÿผ var ํ‚ค์›Œ๋“œ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


1. ์ค‘๋ณต์„ ์–ธ

var x = 5;
var x = 7;
var x = 0;

var ํ‚ค์›Œ๋“œ๋กœ๋Š” ์ด๋ ‡๊ฒŒ ์จ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ๋ณดํ†ต ์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์‚ฌ์šฉํ•˜์ง„ ์•Š์ฃ . ํ•˜์ง€๋งŒ let์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

let x = 5;
let x = 7;
let x = 0;
//Parsing error: Identifier 'x' has already been declared

์ด๋ฏธ ์„ ์–ธ ๋˜์—ˆ์œผ๋‹ˆ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ–ˆ์„ ๋•Œ๋Š” ์ด๊ฒŒ ์ง€๊ทนํžˆ ์ •์ƒ์ธ๊ฑฐ์ฃ . 



2. Hoisting

ํ˜ธ์ด์ŠคํŒ…์€ JavaScript์—์„œ ์‹คํ–‰ ์ฝ˜ํ…์ŠคํŠธ(ํŠนํžˆ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ ๋‹จ๊ณ„)๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ƒ๊ฐ์œผ๋กœ ์—ฌ๊ฒจ์ง‘๋‹ˆ๋‹ค.

console.log(x);   //x is not defined

๋Œ€๋œธ ์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜ ์„ ์–ธ๋„ ์—†์ด ์จ๋ฒ„๋ฆฌ๋ฉด ๋ฐ”๋กœ ์˜ค๋ฅ˜๋ฅผ ๋‚ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ด ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

console.log(x);   //undefined
var x = "hello";
console.log(x);  //"hello"

๋ณด๋‹ค์‹œํ”ผ ์—๋Ÿฌ๊ฐ€ ์•„๋‹Œ undefined ๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—๋Ÿฌ๋ž‘ undefined๋Š” ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†์ฃ . ํ•˜์ง€๋งŒ ์ด๊ฑด ๋ถ„๋ช… ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•œ ๊ฐ’์€ ์•„๋‹๊ฒ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ฐจ๋ผ๋ฆฌ ์‹คํ–‰๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋‚ด์„œ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ์•Œ๋ ค์ฃผ๋Š”๊ฒŒ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ let์€ ์ฝ”๋“œ๊ฐ€ ์œ„์™€๊ฐ™์ด ์ž‘์„ฑ๋˜๋ฉด ๋ฐ”๋กœ ์˜ค๋ฅ˜๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.

console.log(x);
let x = "hello";
console.log(x);
//ReferenceError: x is not defined


3. ๋ณ€์ˆ˜์˜ ์œ ํšจ๋ฒ”์œ„ (Scope)

: ๋ณ€์ˆ˜์˜ ์œ ํšจ๋ฒ”์œ„๋Š” ์ง€์—ญ๋ณ€์ˆ˜์™€ ์ „์—ญ๋ณ€์ˆ˜ ์ด ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ ์ง‘๋‹ˆ๋‹ค. ๋ณดํ†ต ์Šค์ฝ”ํ”„๋ผ๊ณ  ํ•˜์ฃ . ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ํ•˜๋‚˜๋ถ€ํ„ฐ ์—ด๊นŒ์ง€ ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ ๋ณดํ†ต ์ฝ”๋”ฉ์„ ํ•  ๋•Œ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€๋Š” ์•Š์ฃ . ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋˜๋Š” ์ƒํ™ฉ์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

var state = "๋‚˜๋Š” ๋ฐ”๊นฅ์— ์žˆ์–ด.";
console.log(state);              //"๋‚˜๋Š” ๋ฐ”๊นฅ์— ์žˆ์–ด."
if(true) {
	var state = "๋‚˜๋Š” ์•ˆ์— ์žˆ์–ด.";
	console.log(state);      //"๋‚˜๋Š” ์•ˆ์— ์žˆ์–ด."
}
console.log(state);              //"๋‚˜๋Š” ์•ˆ์— ์žˆ์–ด."

๋งจ ๋งˆ์ง€๋ง‰ ์ค„์—์„œ ์˜ˆ์ƒ๊ณผ๋Š” ๋‹ค๋ฅธ ๋‹ต๋ณ€์„ ํ•ฉ๋‹ˆ๋‹ค. ์–˜๋Š” ๋ฐ–์— ์žˆ๋‹ค๊ณ  ๋Œ€๋‹ตํ•ด์•ผํ•  ๊ตฌ๋ฌธ์ธ๋ฐ ์•ˆ์—์žˆ๋‹ค๊ณ  ๋‚˜์˜ค๊ณ  ์žˆ์ฃ . ๊ทธ ์ด์œ ๋Š” if๋ฌธ ์•ˆ์— ์žˆ๋Š” state ๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋งจ ์œ„์— ์„ ์–ธ๋œ state์™€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— if๋ฌธ์—์„œ ํ• ๋‹นํ•œ ๋ฌธ์žฅ์œผ๋กœ ๋ฎ์–ด ์จ๋ฒ„๋ฆฐ ๊ฒƒ์ด์ฃ . ์ด๊ฑธ ๋˜‘๊ฐ™์ด let ํ‚ค์›Œ๋“œ๋กœ ๋ณ€๊ฒฝํ•ด๋ณด์ฃ .

let state = "๋‚˜๋Š” ๋ฐ”๊นฅ์— ์žˆ์–ด.";
console.log(state);                   //"๋‚˜๋Š” ๋ฐ”๊นฅ์— ์žˆ์–ด."
if(true) {
	let state = "๋‚˜๋Š” ์•ˆ์— ์žˆ์–ด.";
	console.log(state);           //"๋‚˜๋Š” ์•ˆ์— ์žˆ์–ด."
}
console.log(state);                   //"๋‚˜๋Š” ๋ฐ”๊นฅ์— ์žˆ์–ด."

์ด๋ฒˆ์—” ์ œ๊ฐ€ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” if๋ฌธ ์•ˆ์— ์žˆ๋Š” state์™€ ๋งจ ์ฒซ ์ค„์˜ state๋Š” ์•„์— ๋‹ค๋ฅธ ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . if๋ฌธ ์•ˆ์— ์žˆ๋Š” state๋Š” if๋ฌธ ์ข…๋ฃŒ์™€ ํ•จ๊ป˜ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋งจ ๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ๋ฌธ์€ ๋งจ ์ฒซ ์ค„์—์„œ ํ• ๋‹นํ•œ ๋ฌธ์žฅ์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 


์ œ๊ฐ€ ๊ณ„์† let๊ณผ var๋ฅผ ๋น„๊ตํ•˜๊ธฐ๋งŒ ํ–ˆ๋Š”๋ฐ const์˜ ์ฐจ์ด์ ์€ ๋‹จ์ง€ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” "์ƒ์ˆ˜" ๋ผ๋Š” ํŠน์ง•๋งŒ ๊ฐ–๊ณ  ์žˆ์„ ๋ฟ ๋‚˜๋จธ์ง€๋Š” let๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€์ ์œผ๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด const๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์ž…๋‹ˆ๋‹ค.

const MAX = 100;
const CURRENT_STATE_TEMP = 17;
MAX = 50;	//ERROR!

์ƒ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๋ฌธ์ž์™€ ์–ธ๋”๋ฐ” ๊ธฐํ˜ธ(_) ์˜ ์กฐํ•ฉ์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด ์Šคํƒ€์ผ์„ ์•ˆ ์ง€ํ‚จ๋‹ค๊ณ  ์˜ค๋ฅ˜๋ฅผ ๋‚ด์ง„ ์•Š์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ ์•”๋ฌต์ ์ธ ๊ทœ์น™์‚ฌํ•ญ์ด ์•„๋‹Œ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(์•„๋งˆ ๊ทธ๋ ‡๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)๊ฐ€ ์ด๋Ÿฌํ•œ ์Šคํƒ€์ผ์„ ์ง€์ผœ์„œ ์ฝ”๋”ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ๊ฐ€ ์ƒ์ˆ˜๋Š” ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๊ฐ’์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ๋‹จ ํ•œ๊ฐ€์ง€์˜ ์˜ˆ์™ธ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

const CAR = {
	"hyundai" : "avante",
	"kia" : "K3",
	"audi" : "A6"
}
console.log(CAR);     //์•„์šฐ๋”” ๊ฐ’์€ A6

CAR.audi = "A3";
console.log(CAR);    //์•„์šฐ๋”” ๊ฐ’์ด A3๋กœ ๋ณ€๊ฒฝ๋จ.

const๋กœ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ–ˆ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๊ฐ์ฒด ํ‚ค ๊ฐ’์œผ๋กœ ์ ‘๊ทผ์„ ํ•ด์„œ ๊ฐ’์„ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋ฉด const๋กœ ์„ ์–ธํ–ˆ์„์ง€๋ผ๋„ ๊ฐ’์ด ๋ฐ”๋€๋‹ˆ๋‹ค. ์ด๋Ÿด๊ฒฝ์šฐ ๊ฐ’์ด ๋ฐ”๋€Œ๋Š”๊ฑธ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Object.freeze ๋‚ด์žฅํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

'javascript > ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

9. generators  (0) 2019.01.22
8. iterators + for..of  (0) 2019.01.11
6. default + rest + spread  (0) 2019.01.03
5. destructuring  (0) 2018.12.31
4. template strings  (0) 2018.12.24
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2024/11   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
๊ธ€ ๋ณด๊ด€ํ•จ