๋ณ€์ˆ˜๋ž€?

๊ฐ’์˜ ์œ„์น˜(์ฃผ์†Œ)๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ์ €์žฅ์†Œ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ’์˜ ์œ„์น˜๋ž€ ๊ฐ’์ด ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ฆ‰, ๋ณ€์ˆ˜๋ž‘ ๊ฐ’์ด ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ช…๋ช…ํ•œ ์‹๋ณ„์ž์ด๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™์ ํƒ€์ž…์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์˜ ํƒ€์ž… ์ง€์ • ์—†์ด ๊ฐ’์ด ํ• ๋‹น ๋˜๋Š” ๊ณผ์ •์—์„œ ์ž๋™์œผ๋กœ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๊ฒฐ์ •๋œ๋‹ค.(Type Inference) ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํƒ€์ž…์˜ ๊ฐ’์„ ์ž์œ ๋กญ๊ฒŒ ํ• ๋‹น ํ•  ์ˆ˜ ์žˆ๋‹ค.


๋ฐ์ดํ„ฐ ํƒ€์ž…

๋ฐ์ดํ„ฐ ํƒ€์ž…(Data Type)์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜๋ฅผ ๋งํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ์›์‹œํƒ€์ž…๊ณผ ๊ฐ์ฒด ํƒ€์ž…์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ง„๋‹ค.

 

์›์‹œํƒ€์ž…( primitive data type)

- boolean

- null

- undefined

- number

- string

- symbol(ES6)

 

๊ฐ์ฒด ํƒ€์ž…(object / reference type)

- object

 

์›์‹œ ํƒ€์ž…(Primitive Data Type)

์›์‹œ ํƒ€์ž…์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’(immutable value)์ด๋ฉฐ pass-by-value(๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ)์ด๋‹ค.

 

number

Java์˜ ๊ฒฝ์šฐ ์ •์ˆ˜์™€ ์‹ค์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ int, long, double ๋“ฑ๊ณผ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ์ˆซ์ž ํƒ€์ž…์ด ์กด์žฌํ•˜์ง€๋งŒ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” number ํ•˜๋‚˜์˜ ์ˆซ์ž ํƒ€์ž…๋งŒ ์กด์žฌํ•œ๋‹ค.+) Infinity : ์–‘์˜ ๋ฌดํ•œ๋Œ€, -Infinity : ์Œ์˜ ๋ฌดํ•œ๋Œ€, NaN : ์‚ฐ์ˆ  ์—ฐ์‚ฐ ๋ถˆ๊ฐ€ (not-a-number)

 

string

๋ฌธ์ž์—ด ํƒ€์ž…์€ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฌธ์ž์—ด์€ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด์™€ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์‚ฌ๋ฐฐ์—ด์ด๋ผ ํ•œ๋‹ค.๊ทธ๋ ‡๋‹ค๊ณ ํ•ด์„œ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.  ์žฌํ• ๋‹น์€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

boolean

๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…์˜ ๊ฐ’์€ ๋…ผ๋ฆฌ์  ์ฐธ, ๊ฑฐ์ง“์„ ๋‚˜ํƒ€๋‚ด๋Š” true์™€ false ๋ฟ์ด๋‹ค.๋น„์–ด์žˆ๋Š” ๋ฌธ์ž์—ด๊ณผ null, undefined, ์ˆซ์ž 0์€ false๋กœ ๊ฐ„์ฃผ๋œ๋‹ค.

 

undefined

undefined ํƒ€์ž…์˜ ๊ฐ’์€ undefined๊ฐ€ ์œ ์ผํ•˜๋‹ค. ์„ ์–ธ ์ดํ›„ ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋Š” undefined๊ฐ’์„ ๊ฐ€์ง„๋‹ค. ์ด๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ์— ์˜ํ•ด ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฒ˜์Œ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ ๊นŒ์ง€ ๋นˆ ์ƒํƒœ๋กœ ๋‚ด๋ฒ„๋ ค๋‘์ง€ ์•Š๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด undefined๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ด๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๊ฒŒ null์„ ํ• ๋‹นํ•œ๋‹ค.

null

null ํƒ€์ž…์˜ ๊ฐ’์€ null์ด ์œ ์ผํ•˜๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ณ„ํ•˜๋ฏ€๋กœ null์€ Null, NULL๊ณผ ๋‹ค๋ฅด๋‹ค.null์€ ์˜๋„์ ์œผ๋กœ ๋ณ€์ˆ˜์— ๊ฐ’์ด ์—†๋‹ค๋Š”๊ฒƒ์„ ๋ช…์‹œ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ๋ณ€์ˆ˜๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–ด๋“œ๋ ˆ์Šค์˜ ์ฐธ์กฐ ์ •๋ณด๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๋ˆ„๊ตฌ๋„ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•ด ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋‹ค.

 

ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋Š” typeof ์—ฐ์‚ฐ์ž๋กœ null๊ฐ’์„ ์—ฐ์‚ฐํ•ด๋ณด๋ฉด null์ด ์•„๋‹Œ object๊ฐ€ ๋‚˜์˜จ๋‹ค ๊ทธ๋Ÿฌ๋ฏ€๋กœ nullํƒ€์ž…์„ ํ™•์ธํ•  ๋•Œ๋Š” typeof๋ง๊ณ  === ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค

var foo = null;
console.log(typeof foo === null); // false
console.log(foo === null);        // true

symbol

์‹ฌ๋ณผ(symbol)์€ ES6์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ 7๋ฒˆ์งธ ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ์›์‹œ ํƒ€์ž…์˜ ๊ฐ’์ด๋‹ค. ์‹ฌ๋ณผ์€ ์ฃผ๋กœ ์ด๋ฆ„์˜ ์ถฉ๋Œ ์œ„ํ—˜์ด ์—†๋Š” ์œ ์ผํ•œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

// ์‹ฌ๋ณผ key๋Š” ์ด๋ฆ„์˜ ์ถฉ๋Œ ์œ„ํ—˜์ด ์—†๋Š” ์œ ์ผํ•œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ํ‚ค
var key = Symbol('key');
console.log(typeof key); // symbol

var obj = {};
obj[key] = 'value';
console.log(obj[key]); // value

 


๊ฐ์ฒดํƒ€์ž…(Object type, Reference type)

๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ทธ ๋ฐ์ดํ„ฐ์— ๊ด€๋ จํ•œ ๋™์ž‘(์ ˆ์ฐจ,๋ฐฉ๋ฒ•,๊ธฐ๋Šฅ)์„ ๋ชจ๋‘ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์  ์กด์žฌ์ด๋‹ค.

๊ฐ์ฒด๋Š” ์›์‹œํƒ€์ž…์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๊ฐ’๋“ค์ด ๋ชจ๋‘ ๊ฐ์ฒด์ด๊ณ  ๊ฐ์ฒด๋Š” pass-by-reference(์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ) ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.


๋ณ€์ˆ˜

๋ณ€์ˆ˜๋Š” var,let,const ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์„ ์–ธํ•˜๊ณ  ํ• ๋‹น์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹๋ณ„์ž์ธ ๋ณ€์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•ด ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ์ฐธ์กฐํ•œ๋‹ค.

 

๋™์  ํƒ€์ดํ•‘(Dynamic Typing)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™์  ํƒ€์ž…(dynamic/ weak type)์–ธ์–ด์ด๋‹ค. ์ด๊ฒƒ์€ ๋ณ€์ˆ˜์˜ ํƒ€์ž… ์ง€์ • ์—†์ด ๊ฐ’์ด ํ• ๋‹น๋˜๋Š” ๊ณผ์ •์—์„œ ๊ฐ’์˜ ํƒ€์ž…์— ์˜ํ•ด ์ž๋™์œผ๋กœ ํƒ€์ž…์ด ๊ฒฐ์ • ๋  ๊ฒƒ์ด๋ผ๋Š” ๋œป์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ™์€ ๋ณ€์ˆ˜์— ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ฅผ ๋™์  ํƒ€์ดํ•‘(Dynamic Typing)์ด๋ผํ•œ๋‹ค.

 

 

 

์ฐธ๊ณ 

poiemaweb.com/js-data-type-variable

 

Data type & Variable | PoiemaWeb

๋ณ€์ˆ˜๋Š” ๊ฐ’์˜ ์œ„์น˜(์ฃผ์†Œ)๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ์ €์žฅ์†Œ์ด๋‹ค. ๊ฐ’์˜ ์œ„์น˜๋ž€ ๊ฐ’์ด ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์ฃผ์†Œ(address)๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ๋ณ€์ˆ˜๋ž€ ๊ฐ’์ด ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(Memory address)์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด

poiemaweb.com

 

๐Ÿ’ก Destructuring Assignment (๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น)

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์ด๋ž€ ๋ง ์˜๋ฏธ ๊ทธ๋Œ€๋กœ ๊ฐ์ฒด, ๋ฐฐ์—ด์˜ ๊ตฌ์กฐ๋ฅผ ๋ถ„ํ•ดํ•˜์—ฌ ๋ถ„ํ•ดํ•œ ๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

(๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น ๊ตฌ๋ฌธ์€ ๋ฐฐ์—ด์˜ ๊ฐ’์ด๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋ณ„๊ฐœ์˜ ๋ณ€์ˆ˜๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹)


๐Ÿ’ก ๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น 

let arr = ["dong","hwi"];

// ๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด 
let [firstName, surname] = arr;

console.log(firstName);
console.log(surname);

// ๋ฐฐ์—ด์œผ๋กœ ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋๋‹ค.

split(' ') ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

let [firstname, surname] = "kim dong".split(' ');

* ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์„ ํ•œ๋‹ค๊ณ  ํ•ด์„œ ๊ธฐ์กด์˜ arr๋Š” ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.

 

1. ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

// ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Œ
let [firstName, , title] = ["Julius", "Caesar", "Consul", "of the Roman Republic"];

alert( title ); // Consul

2. ํ• ๋‹น ์—ฐ์‚ฐ์ž ์ขŒ์ธก์—” ๋ญ๋“ ์ง€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

ํ• ๋‹น ์—ฐ์‚ฐ์ž ์ขŒ์ธก์—” ํ• ๋‹น ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋ฉด ์–ด๋–ค ๊ฒƒ์ด๋“ ์ง€ ์˜ฌ์ˆ˜ ์žˆ๋‹ค.(๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ๋„ ๊ฐ€๋Šฅ)

let user = {};
[user.name, user.surname] = "kim hwi".split(' ');

console.log(user.name);

3. entries()๋กœ ๋ฐ˜๋ณตํ• ์ˆ˜ ์žˆ๋‹ค.

let user = {
	name : 'john',
	age:30
};

for(let[key, value] of Object.entries(user)){
	console.log(`${key} : ${value}`);
}

4.'...'๋กœ ๋‚˜๋จธ์ง€ ์š”์†Œ ๋ฐฐ์—ด๋กœ๊ฐ€์ ธ์˜ค๊ธฐ

let [name1, name2, ...rest] = ['a','b','c','d','e'];

console.log(name1);
console.log(name2);

console.log(rest[0]);	// c
console.log(rest[1]);	// d

rest๋ง๊ณ  ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ช…๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋ณ€์ˆ˜๋ช… ์•ž์— . ์„ธ๊ฐœ๋ฅผ ๊ผญ ์ง€์ผœ์ค˜์•ผํ•œ๋‹ค.


๐Ÿ’ก ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

let options = {
	title: "menus",
    width:100,
    height:200
};

let {title, width, height} = options;

console.log(title);
console.log(width);
console.log(height);

์ฐธ๊ณ 

ko.javascript.info/destructuring-assignment

 

๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

 

ko.javascript.info

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐ์ฒด ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ๋Š”๋ฐ ES6์—์„œ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๊ฐ’์˜ ์ด๋ฆ„์ด ๋™์ผ ํ•  ๊ฒฝ์šฐ ์ข€ ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋‚˜์™”๋‹ค.

Shorthand Properties

์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด ๋” ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

var animation ='๋ชจ์•„๋‚˜';
var movies = ['์‚ผ์ง„๊ทธ๋ฃน ์˜์–ดํ† ์ต๋ฐ˜','์ •์งํ•œ ํ›„๋ณด'];

// ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
var favorite ={
    animation : animation,
    movies : movies
};
// ES6
var favorite ={
    animation,
    movies
};

์ด๋ ‡๊ฒŒ ํ”„๋กœํผํ‹ฐ์˜ key์˜ ์ด๋ฆ„๊ณผ value์˜ ์ด๋ฆ„์ด ๊ฐ™๋‹ค๋ฉด ์ถ•์•ฝํ•ด์„œ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

๐Ÿ’ก ๋ณ€์ˆ˜์˜ ์ƒ์„ฑ ๋‹จ๊ณ„

1. ์„ ์–ธ๋‹จ๊ณ„(Declaration phase)

     ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ๋ณ€์ˆ˜๋ฅผ ๋“ฑ๋กํ•œ๋‹ค. ์ด ๋ณ€์ˆ˜ ๊ฐ์ฒด๋Š” ์Šค์ฝ”ํ”„๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋Œ€์ƒ์ด ๋œ๋‹ค.

2. ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„ (Initialization phase)

    ๋ณ€์ˆ˜ ๊ฐ์ฒด์— ๋“ฑ๋ก๋œ ๋ณ€์ˆ˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•œ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ๋ณ€์ˆ˜๋Š” undefined๋กœ ์ดˆ๊ธฐํ™” ๋œ๋‹ค.

3. ํ• ๋‹น ๋‹จ๊ณ„( Assignment phase)

    undefined๋กœ ์ดˆ๊ธฐํ™”๋œ ๋ณ€์ˆ˜์— ์‹ค์ œ ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค.

๐Ÿ’ก var์˜ ๋ฌธ์ œ์ 

1. ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„(Function-level scope)

   - ์ „์—ญ ๋ณ€์ˆ˜ ๋‚จ๋ฐœ

   - for๋ฌธ ์ดˆ๊ธฐํ™”์‹์—์„œ ์‚ฌ์šฉํ•œ ๋ณ€์ˆ˜๋ฅผ ์™ธ๋ถ€์—์„œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.

2. var ํ‚ค์›Œ๋“œ ์ƒ๋žต ํ—ˆ์šฉ

    - ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ์ „์—ญํ™”

3. ์ค‘๋ณต ์„ ์–ธ ํ—ˆ์šฉ

   - ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๊ฐ’ ๋ณ€๊ฒฝ

4. ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

   - ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์— ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

๐Ÿ’ก ํ˜ธ์ด์ŠคํŒ…(Hoisting)์ด๋ž€?

- ํ˜ธ์ด์ŠคํŒ…์€ var , let , const, function ๋“ฑ ๋ชจ๋“  ์„ ์–ธ์„ ์œ ํšจ๋ฒ”์œ„(scope)์— ๋”ฐ๋ผ ๊ฐ€์žฅ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

- ํ˜ธ์ด์ŠคํŒ…์œผ๋กœ ์ดˆ๊ธฐํ™” ๋œ ๊ฐ’์€ ์ œ์™ธํ•˜๊ณ  ์„ ์–ธ๋งŒ ๋Œ์–ด ์˜ฌ๋ฆฐ๋‹ค.

- ์„ ์–ธ๊ณผ ํ• ๋‹น์˜ ๋ถ„๋ฆฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.

- ์œ ํšจ๋ฒ”์œ„์—๋Š” 'ํ•จ์ˆ˜๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„'์™€ '๋ธ”๋Ÿญ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„'๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

- var๋Š” ํ•จ์ˆ˜๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„์ด๊ณ  let,const๋Š” ๋ธ”๋Ÿญ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„์ด๋‹ค. 

- var๋Š” ์ดˆ๊ธฐ ๊ฐ’์ด ์—†๋‹ค๋ฉด ์„ ์–ธ์™€ ๋™์‹œ์— undefined๋กœ ์ดˆ๊ธฐํ™” ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ ์–ธ ์ „์—๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ’ก var , let , const ๋น„๊ต

  var let const
์žฌ์„ ์–ธ๊ฐ€๋Šฅ์—ฌ๋ถ€ ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ
์Šค์ฝ”ํ”„ ํ•จ์ˆ˜๋ ˆ๋ฒจ ๋ธ”๋Ÿญ๋ ˆ๋ฒจ ๋ธ”๋Ÿญ๋ ˆ๋ฒจ
์ดˆ๊ธฐ๊ฐ’ ์„ ํƒ ์„ ํƒ ํ•„์ˆ˜
๊ฐ’ ์žฌํ• ๋‹น ์—ฌ๋ถ€  ๊ฐ€๋Šฅ ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ
์„ ์–ธ ์ „ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ ๋ถˆ๊ฐ€๋Šฅ

 

๐Ÿ’™ const ์™€ let  ๊ฐ’ ๋ณ€๊ฒฝ ์—ฌ๋ถ€์—์„œ ํ—ท๊ฐˆ๋ฆด์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ์ฒจ์–ธํ•ด๋ณด์ž๋ฉด (๋‚˜๋„ ํ—ท๊ฐˆ๋ ธ๋‹ค.)

      ์—ฌ๊ธฐ์„œ ๋ณ€๊ฒฝ์€ ๊ฐ’์˜ ๋ณ€๊ฒฝ์ด ์•„๋‹ˆ๋ผ '๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ'์˜ ๋ณ€๊ฒฝ์ด๋‹ค.

       let ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅ ํ•˜๊ณ  const ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

let Arr = [];
Arr.push(1);
Arr.push(2);
Arr.push(3);

//	Arr ๋ฐฐ์—ด์•ˆ์—์„œ ๊ฐ’์ด ์ถ”๊ฐ€๋˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.
//	๊ทธ๋ž˜์„œ const๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.

const Arr = [];
Arr.push(1);
Arr.push(2);
Arr.push(3);

๐Ÿ’ก ์˜ˆ์‹œ 

console.log(num);		// undefined
var num;

 

์ฐธ๊ณ 

poiemaweb.com/es6-block-scope

 

let, const | PoiemaWeb

ES5๊นŒ์ง€ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ var ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค. ์ด๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€๋Š” ๋‹ค๋ฅธ ํŠน์ง•์œผ๋กœ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์ง€ ์•Š์œผ๋ฉด

poiemaweb.com

 

+ Recent posts