๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์Šค์ฝ”ํ”„(์œ ํšจ ๋ฒ”์œ„)๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

 

  • var : ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„(function scope)
  • let, const : ๋ธ”๋ก ์Šค์ฝ”ํ”„(block scope)

์—ฌ๊ธฐ์„œ "์Šค์ฝ”ํ”„"๋Š” ๊ทธ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์˜ ๋ฒ”์œ„๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.


ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ž€?

var๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ์ „์ฒด์—์„œ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, if, for, { } ๊ฐ™์€ ๋ธ”๋ก({}) ๋‚ด๋ถ€์— ์„ ์–ธํ•ด๋„ ๋ธ”๋ก ๋ฐ–์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๋ธ”๋ก ์Šค์ฝ”ํ”„๋ž€?

let์ด๋‚˜ const๋Š” ํ•ด๋‹น ๋ธ”๋ก({}) ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ECMAScript 2015(ES6)์—์„œ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.


์˜ˆ์ œ

(1) var๋Š” ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„

if (true) {
  var x = 5;
}
console.log(x); // 5

 

 

  • var x๋Š” if๋ฌธ ๋ธ”๋ก {} ์•ˆ์—์„œ ์„ ์–ธ๋์ง€๋งŒ,
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ์ธ์‹ํ•˜์ง€ ์•Š๊ณ , ํ•จ์ˆ˜ ์ „์ฒด(๋˜๋Š” ์ „์—ญ)์— ์˜ฌ๋ฆผ(hoisting).
  • ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ๋Š” ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค:
var x;         // ์„ ์–ธ์ด ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง
if (true) {
  x = 5;
}
console.log(x); // 5

 


(2) let์ด๋‚˜ const๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„

if (true) {
  let y = 10;
}
console.log(y); // ReferenceError: y is not defined

 

  • y๋Š” if ๋ธ”๋ก ๋‚ด๋ถ€์—์„œ๋งŒ ์กด์žฌํ•จ.
  • ๋ธ”๋ก์ด ๋๋‚˜๋ฉด y๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ๋ผ์ง.
  • ๊ทธ๋ž˜์„œ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚จ.

ํ•œ๋ˆˆ์— ์ •๋ฆฌ

์„ ์–ธ ๋ฐฉ์‹ ์Šค์ฝ”ํ”„ ์ข…๋ฅ˜ if/for/๋ธ”๋ก ์•ˆ์—์„œ ์œ ํšจ? ๋ธ”๋ก ๋ฐ– ์ ‘๊ทผ ๊ฐ€๋Šฅ? ๋น„๊ณ 
var ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„ โŒ (๋ธ”๋ก ๋ฌด์‹œ๋จ) โœ… ๊ฐ€๋Šฅ ES5 ์ดํ•˜ ๋ฌธ๋ฒ•
let ๋ธ”๋ก ์Šค์ฝ”ํ”„ โœ… โŒ ๋ถˆ๊ฐ€ ES6 ์ดํ›„ ๋ฌธ๋ฒ•
const ๋ธ”๋ก ์Šค์ฝ”ํ”„ โœ… โŒ ๋ถˆ๊ฐ€ ์ƒ์ˆ˜ (๊ฐ’ ์žฌํ• ๋‹น ๋ถˆ๊ฐ€)

 


์™œ ์ด๋Ÿฐ ์„ค๊ณ„์ผ๊นŒ?

์˜›๋‚  JS(ES5 ์ด์ „)๋Š” ํ•จ์ˆ˜ ๋‹จ์œ„ ์–ธ์–ด ์„ค๊ณ„๋ฅผ ๋”ฐ๋ž๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. C๋‚˜ Java์ฒ˜๋Ÿผ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง„ ๊ฒŒ ์•„๋‹ˆ๋ผ,
“๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๊ธฐ์ค€” ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— if๋‚˜ for ์•ˆ์—์„œ ์„ ์–ธํ•ด๋„ ๋ฐ–์—์„œ ์“ธ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

ES6 ์ดํ›„ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์ด ํ—ท๊ฐˆ๋ คํ•ด์„œ,
ํ˜„๋Œ€ JS์—์„œ๋Š” let๊ณผ const๋กœ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๋„๋ก ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.


๊ฒฐ๋ก 

var๋Š” ๋ธ”๋ก({})์„ ๋ฌด์‹œํ•˜๊ณ  ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ๋งŒ ์Šค์ฝ”ํ”„๋ฅผ ๋งŒ๋“ ๋‹ค.
๊ทธ๋ž˜์„œ if, for ์•ˆ์—์„œ ์„ ์–ธํ•ด๋„ ๋ฐ–์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฐ˜๋ฉด let๊ณผ const๋Š” ๋ธ”๋ก ๋‹จ์œ„ ์Šค์ฝ”ํ”„๋ผ,
๋ธ”๋ก์ด ๋๋‚˜๋ฉด ๋ณ€์ˆ˜๋„ ์‚ฌ๋ผ์ง„๋‹ค.

๋ฐ˜์‘ํ˜•