# ์œ ํšจ ๋ฒ”์œ„(Scope)

์Šค์ฝ”ํ”„๋ž€ ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€์ˆ˜๋Š” ์œ ํšจ ๋ฒ”์œ„๊ฐ€ ์ „์—ญ์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ณ€์ˆ˜ ์„ ์–ธ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์˜์—ญ์—์„œ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ™์Šต๋‹ˆ๋‹ค.

var a = 10;

๋งŒ์•ฝ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ ‘๊ทผํ•˜๋”๋ผ๋„ ๋™์ผํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

var a = 10;

function getA() {
  console.log(a);
}

getA(); // 10

# ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„๋˜๋Š” ๋ณ€์ˆ˜ ๋ฒ”์œ„

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

var a = 10;

function getA() {
  var a = 20;
  console.log(a);
}

getA(); // 20
console.log(a); // 10

์œ„ ์ฝ”๋“œ๋Š” ํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ ๋ณ€์ˆ˜ a๋ฅผ ์„ ์–ธํ•˜๊ณ  10์„ ๋Œ€์ž…ํ•œ ๋’ค, getA()๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด์„œ ํ•จ์ˆ˜ ์•ˆ์— ๋ณ€์ˆ˜ a๋ฅผ ์ƒˆ๋กœ ์„ ์–ธํ•˜๊ณ  20์„ ๋Œ€์ž…ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. getA() ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ•จ์ˆ˜ ์•ˆ์˜ ๋ณ€์ˆ˜์ธ a๊ฐ€ 20์˜ ๊ฐ’์œผ๋กœ ์ฝ˜์†”์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ๋๋‚˜๊ณ  ๋‚˜์„œ console.log(a);๋กœ ๋‹ค์‹œ a์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด 10์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„๋Š” ํ•จ์ˆ˜ ๋‹จ์œ„(function)๋กœ ํ•œ์ •๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.