๊ฐœ๋ฐœ ์‹œ๋‚˜๋ธŒ๋กœ

์‹คํ–‰ ์ปจํ…์ŠคํŠธ

youngdeok 2023. 4. 8. 18:34

์‹คํ–‰ ์ปจํ…์ŠคํŠธ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๋‹ค ๋ณด๋ฉด ์‹ฌ์‹ฌ์น˜ ์•Š๊ฒŒ ์‹คํ–‰์ปจํ…์ŠคํŠธ๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ •๋ฆฌํ•ด ๋ณด๊ฒƒ์Šต๋‹ˆ๋‹ค.

์™œ ์•Œ์•„์•ผ ํ•˜๋Š”๊ฐ€?

“์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์™œ ๊ทธ๋ ‡๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ง€ ์—ฌ๋Ÿฌ๋ถ„๊ป˜ ์„ค๋ช…ํ•ด์ค๋‹ˆ๋‹ค.” - ์ œ๋กœ์ดˆ ๋ธ”๋กœ๊ทธ

“์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋™์ž‘์›๋ฆฌ๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ํ•ต์‹ฌ ๊ฐœ๋…์ด๋‹ค.” - ๋ชจ๋˜ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ๋”ฅ๋‹ค์ด๋ธŒ

๋ฐฐ์›Œ์•ผ ๊ฒ ์ฃ ?... ใ…Ž

๊ทผ๋ฐ ์–ด๋ ต๋‹ค

์‹คํ–‰์ปจํ…์ŠคํŠธ๋ฅผ ์ •๋ฆฌ ํ•˜๊ธฐ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ์™€ ์ฑ…์„ ๋ณด๋‹ค๋ณด๋ฉด ๋‹ค๋“ค ํ•˜๋‚˜ ๊ฐ™์ด ์–ด๋ ต๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด๊ธฐ์— ๋๊นŒ์ง€ ์ •์‹ ์ค„ ๋ถ™์žก๊ณ  ๋”ฐ๋ผ ์˜ค์‹œ๊ธธ…

๋‚ด์šฉ์ด ์ซŒ๋งŽ๊ณ  ์ฑ…์— ์žˆ๋Š” ๋‚ด์šฉ๋“ค์„ ์ถ”๋ ค์„œ ๊ฐ€์ ธ์˜ค๋‹ค๋ณด๋‹ˆ ๋‚ด์šฉ์ด ๋‘์„œ์—†์ด ์ง„ํ–‰ ๋˜๋Š”๋ฐ ํ•œ๋ฒˆ ๋๊นŒ์ง€ ์ฝ์œผ์‹œ๊ณ  ํ•œ๋ฒˆ ๋” ์ฝ๋Š” ๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค!.

์‹œ์ž‘์ „ ๊ฐ„๋‹จํ•œ ์šฉ์–ด ์ •๋ฆฌ

Stack

์Šคํƒ์€ “์„ ์ž…ํ›„์ถœ”์ž…๋‹ˆ๋‹ค. ๋ง๊ทธ๋Œ€๋กœ ๋จผ์ € ๋„ฃ์€๊ฒŒ ๋‚˜์ค‘์— ๋‚˜์˜จ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

ํ†ต์— ํฌ๊ธฐ์— ๋”ฑ๋งž๋Š” ์ ค๋ฆฌ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ์›ํ†ต? ์ •๋„ ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ด์ŠคํŒ…

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋Ÿฐํƒ€์ž„ ์ „์— ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•  ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์˜ ์„ ์–ธ๋ฌธ๋“ค์ด ๋งจ~ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ์ž‘์—…์„ ํ•˜๋Š”๋ฐ, ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ์‹œ๋ฉด ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ •๋ฆฌํ•˜๋Š”๋ฐ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!.


์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ž€?

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฝ”๋“œ์˜ ์•ž๋’ค ๋‚ด์šฉ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์‹คํ–‰ํ•  ์ฝ”๋“œ์— ์ œ๊ณตํ•  ํ™˜๊ฒฝ ์ •๋ณด๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ์ œ๋กœ์ดˆ ๋‹˜์˜ ๋ธ”๋กœ๊ทธ์—์„œ ๊ฐ€์ ธ์˜จ๊ฑด๋ฐ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ ์ข‹์€ ๊ฒƒ ๊ฐ™์•„ ๊ฐ€์ ธ์™€๋ดค์Šต๋‹ˆ๋‹ค.

์ปจํ…์ŠคํŠธ ๊ฐ์ฒด์—๋Š” {’๋ณ€์ˆ˜๊ฐ์ฒด’, ‘scopeChain’, ‘this ๋ฐ”์ธ๋”ฉ’}์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋“ค์ค‘ ๋ณ€์ˆ˜๊ฐ์ฒด์™€ scopeChain์— ๋Œ€ํ•ด์„œ๋งŒ ์„ค๋ช…์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

'์ „์—ญ ์ปจํ…์ŠคํŠธ': {
  ๋ณ€์ˆ˜๊ฐ์ฒด: {
    arguments: null,
    variable: ['name', 'wow', 'say'],
  },
  scopeChain: ['์ „์—ญ ๋ณ€์ˆ˜๊ฐ์ฒด'],
  this: window,
}

์†Œ์Šค์ฝ”๋“œ ํ‰๊ฐ€์™€ ์‹คํ–‰

๋ชจ๋“  ์†Œ์Šค์ฝ”๋“œ๋Š” ์‹คํ–‰์—(๋Ÿฐํƒ€์ž„) ์•ž์„œ ํ‰๊ฐ€ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, JSEngine์€ ํ‰๊ฐ€์™€ ์‹คํ–‰์„ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. (ํ˜ธ์ด์ŠคํŒ…์ด ์ƒ๊ฐ ๋‚˜์‹œ์ฃ ? ์ข‹์Šต๋‹ˆ๋‹ค).

ํ‰๊ณผ ๊ณผ์ •์—์„œ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑ.

๋ณ€์ˆ˜ ํ•จ์ˆ˜๋“ฑ์˜ ์„ ์–ธ๋ฌธ๋งŒ ๋จผ์ € ์‹คํ–‰ํ•˜์—ฌ ์ƒ์„ฑ๋œ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜ ์‹๋ณ„์ž๋ฅผ ํ‚ค๋กœ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ญ”์†Œ๋ฆฌ๋ƒ ํ•˜๋ฉด

var x;
x = 10;

๋Ÿฐํƒ€์ž„ ์ „ var x; ์†Œ์Šค์ฝ”๋“œ๋Š” ๋Ÿฐํƒ€์ž„ ์ „์— ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์Šค์ฝ”ํ”„์— ๋“ฑ๋ก์ด๋˜๊ณ  undefined๋กœ ์ดˆ๊ธฐํ™” ๋ฉ๋‹ˆ๋‹ค.

 

ํ‰๊ฐ€ ๊ณผ์ •์ด ๋๋‚˜๋ฉด ์‹คํ–‰๊ณผ์ •์ด ์‹œ์ž‘๋˜๋Š”๋ฐ, var x;๋Š” ์ด๋ฏธ ํ‰๊ฐ€์—์„œ ์‹คํ–‰์ด ์™„๋ฃŒ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— x=10;์ด ์‹คํ–‰ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ x์˜ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š”๋ฐ ์ด๋•Œ ์Šค์ฝ”ํ”„์— x๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋“ฑ๋ก๋œ ๋ณ€์ˆ˜์ž„์ด ํ™•์ธ๋˜๋ฉด, ๊ฐ’์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ์ •๋ฆฌํ•œ๋ฒˆ ํ•˜๊ณ  ๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ ์ฆ‰, ์ฝ”๋“œ์˜ ๋ฌธ๋งฅ์ด๋‹ค.
  • JS์ฝ”๋“œ๋Š” ์‹คํ–‰์— ์•ž์„œ ํ‰๊ฐ€ ํ›„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • ์œ„์˜ ์˜ˆ์ œ๋กœ x๊ฐ€ ํ‰๊ฐ€ ๋ ๋•Œ๋Š” undefined๋กœ ์‹คํ–‰๋  ๋•Œ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์•ˆ์˜ ๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ”„์— ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค.

์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์—ญํ• 

์•„๋‹ˆ ๊ทธ๋ž˜์„œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ญํ•˜๋Š” ๊ฑด๋ฐ?

const x = 1;
const y = 2;

function foo(a) {
    const x = 10;
    const y = 20;

    console.log(a + x + y);
}

foo(100);

console.log(x + y);

์–ด๋–ป๊ฒŒ ์‹คํ–‰ ๋ ๊นŒ์—ฌ?

์œ„์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ fooํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด. ํ•จ์ˆ˜ ๋ฐ–์œผ๋กœ ๋‚˜์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

- ํ•จ์ˆ˜ํ˜ธ์ถœ ์ด์ „ ๋‹จ๊ณ„๋กœ ๋˜๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์ฝ”๋“œ์™€ ์ด์ „์— ์‹คํ–‰ํ•˜๋˜ ์ฝ”๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ด€๋ฆฌ.

- ์ด์ฒ˜๋Ÿผ ์‹คํ–‰๋˜๋ ค๋ฉด ์Šค์ฝ”ํ”„, ์‹๋ณ„์ž, ์ฝ”๋“œ ์‹คํ–‰์ˆœ์„œ ๋“ฑ์˜ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

์ด ๋ชจ~๋“  ๊ฒƒ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.

 

์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ณ  ์ฝ”๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์‹ค์ œ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.

 

์‰ฝ๊ฒŒ ์„ค๋ช…์„ ๋“œ๋ฆฌ๋ฉด

๋ฐฉ๊ธˆ ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ๊ฐ๊ฐ์ ์œผ๋กœ foo์•ˆ์˜ console.log(a + x + y); ์ฝ”๋“œ ์•ˆ์— ๋ณ€์ˆ˜๋“ค์ด ์ „์—ญ ๋ณ€์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ fooํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ๋ณ€์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ค ๊ฒ๋‹ˆ๋‹ค.

๋˜ํ•œ ํ•จ์ˆ˜ ๋ฐ–์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„  ํ•จ์ˆ˜์•ˆ์— ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ๊ณต๊ฐ„์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๊ฒ ์ฃ ?

์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ธ๊ฐ„์˜ ๊ฐ๊ฐ์ ์œผ๋กœ ๊ฐ€ ์•„๋‹Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฝ๋Š”์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

 

์ซŒ ์ถ”์ƒ์ ์ด์ฃ ??

์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ

const x = 1;
function foo() {
    const y = 2;

    function bar() {
        const z = 3;
        console.log(x + y + z);
    }
    bar();
}
foo()

JSEngine์€ ๋จผ์ € ์ „์—ญ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•œ๋‹ค๊ณ  ์œ„์—์„œ ์„ค๋ช…ํ–ˆ์ฃ ?? → ์‹คํ–‰ ํ›„ ์ „์—ญ ์ปจํ…์ŠคํŠธ๋ผ๋Š” ๋ฌธ์„œ๋ฅผ ๋ฑ‰์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ํ•จ์ˆ˜์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ ํ•˜์—ฌ ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ์ƒ์„ฑ๋œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

  • ์ด๋ฅผ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์ด๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

 

์•„๊นŒ ์‹คํ–‰์ปจํ…์ŠคํŠธ์˜ ์—ญํ™œ์—์„œ ๋ดค๋˜ ์ฝ”๋“œ ์ถ”์ƒํ™” ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์œ„์˜ ์˜ˆ์ œ๋กœ ์ผ๋ฐ˜ํ™” ์‹œ์ผœ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ „์—ญ ์ฝ”๋“œ ํ‰๊ฐ€ → ์ „์—ญ ์ฝ”๋“œ ์‹คํ–‰ → ํ•จ์ˆ˜ ์ฝ”๋“œ ํ‰๊ฐ€ → ํ•จ์ˆ˜ ์ฝ”๋“œ ์‹คํ–‰.

  1. ์ „์—ญ ์ฝ”๋“œ์˜ ํ‰๊ฐ€์™€ ์‹คํ–‰
  2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๋จผ์ € ์ „์—ญ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•ด์„œ ์ „์—ญ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ „์—ญ ๋ณ€์ˆ˜ x์™€ ์ „์—ญํ•จ์ˆ˜ foo๋Š” ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋“ฑ๋ก ๋ฉ๋‹ˆ๋‹ค.. ์ดํ›„ ์ „์—ญ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰ ๋˜๊ธฐ ์‹œ์ž‘ํ•˜์—ฌ ์ „์—ญ ๋ณ€์ˆ˜x์— ๊ฐ’์ด ํ• ๋‹น๋˜๊ณ  ์ „์—ญ๋ณ€์ˆ˜ foo๊ฐ€ ํ˜ธ์ถœ!.
  3. foo ํ•จ์ˆ˜ ์ฝ”๋“œ์˜ ํ‰๊ฐ€์™€ ์‹คํ–‰JSEngine์€ fooํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ fooํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ง€์—ญ๋ณ€์ˆ˜ y์— ๊ฐ’์ด ํ•ญ๋‹น๋˜๊ณ  ์ค‘์ฒฉ ํ•จ์ˆ˜ bar๊ฐ€ ํ˜ธ์ถœ ๋ฉ๋‹ˆ๋‹ค.
  4. ์ „์—ญํ•จ์ˆ˜ foo๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ „์—ญ์ฝ”๋“œ์˜ ์‹คํ–‰์€ ์ผ์‹œ ์ค‘๋‹จ๋˜๊ณ  ์ฝ”๋“œ์˜ ์ œ์–ด๊ถŒ์ด fooํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  5. bar ํ•จ์ˆ˜ ์ฝ”๋“œ์˜ ํ‰๊ฐ€์™€ ์‹คํ–‰
  6. ์ค‘์ฒฉํ•จ์ˆ˜ bar๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด fooํ•จ์ˆ˜ ์ฝ”๋“œ์˜ ์‹คํ–‰์€ ์ผ์‹œ ์ค‘๋‹จ๋˜๊ณ  ์ฝ”๋“œ์˜ ์ œ์–ด๊ถŒ์ด barํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ bar ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ barํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹คํ–‰์ปจํ…์ŠคํŠธ ์Šคํƒ์— ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ง€์—ญ๋ณ€์ˆ˜ z์— ๊ฐ’์ด ํ• ๋‹น ๋˜๊ณ  ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ›„. ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  7. fooํ•จ์ˆ˜๋กœ ๋ณต๊ท€
  8. barํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ ๋˜๋ฉด ์ œ์–ด๊ถŒ์€ ๋‹ค์‹œ foo ํ•จ์ˆ˜๋กœ ์ด๋™ํ•œ๋‹ค. ์ด๋•Œ ๋” ์ด์ƒ ์ง„ํ–‰ํ•  ์ฝ”๋“œ๊ฐ€ ์—†์Œ์œผ๋กœ ์ข…๋ฃŒ. bar๋Š” ์Šคํƒ์—์„œ ํŒ๋ฉ๋‹ˆ๋‹ค.
  9. ์ „์—ญ ์ฝ”๋“œ๋กœ ๋ณต๊ท€
  10. fooํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ฝ”๋“œ์˜ ์ œ์–ด๊ถŒ์€ ๋‹ค์‹œ fooํ•จ์ˆ˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ fooํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์Šคํƒ์—์„œ ํŒํ•ฉ๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์€ ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ ‰์‹œ์ปฌํ™˜๊ฒฝ

์œ„์—์„œ๋Š” ์—ฌํƒœ๊ป ์ „์ฒด์ ์ธ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ง€์— ๋Œ€ํ•œ ์„ค๋ช…์ด์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๊ณต๊ฐ„์•ˆ์— ๋ณ€์ˆ˜๋Š” ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ ๋˜๊ณ  ๋™์ž‘๋ ๊นŒ์—ฌ?

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

์ •๋ฆฌ: ๋ ‰์‹œ์ปฌํ™˜๊ฒฝ์€ ์‹๋ณ„์ž์™€ ๊ฐ’ ์ƒ์œ„์— ์žˆ๋Š” ๋‚ด๊ฐ€ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” block์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

const x = 1;

function foo() {
    const y = 2;
    console.log(x + y);
}

foo ํ•จ์ˆ˜์— ์ง€์—ญ๋ณ€์ˆ˜ y๊ฐ€ ์—†๋‹ค. foo๋Š” ์–ด๋–ป๊ฒŒ x์˜ ๊ฐ’์„ ์ฐพ์„๊นŒ?? ์— ๋Œ€ํ•œ ๋‹ต์ด์ž.

๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์˜ ์—ญํ• ์ž…๋‹ˆ๋‹ค.

- ์ด ๋ถ€๋ถ„์€ ์•ž์œผ๋กœ ๋ฐฐ์šธ ํด๋กœ์ €์—์„œ ๊ต‰์žฅํ•œ ๋ฐ‘๋ฐ”ํƒ•์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ˆ™์ง€ํ•ด๋†“๊ณ  ๊ฐ€์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

 

let age = 30;

function showAge() {
 console.log(age);

 let age = 20;
}

showAge();

์œ„์˜ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ์ง€ ์ „์—ญ ์ฝ”๋“œ ํ‰๊ฐ€ → ์ „์—ญ ์ฝ”๋“œ ์‹คํ–‰ → ํ•จ์ˆ˜ ์ฝ”๋“œ ํ‰๊ฐ€ → ํ•จ์ˆ˜ ์ฝ”๋“œ ์‹คํ–‰ ์ˆœ์„œ๋Œ€๋กœ ๋จธ๋ฆฟ์†์œผ๋กœ ํ˜น์€ ๊ณต์ฑ…์— ์ ์–ด๊ฐ€๋ฉฐ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”!. ๋˜ ๋ธ”๋Ÿญ ์•ˆ์— ์›ํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋„ ์œ„์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉฐ ๊ณต๋ถ€ํ•ด ๋ณด์‹œ๋ฉด ์ •๋ฆฌ๊ฐ€ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

https://www.zerocho.com/category/JavaScript/post/5741d96d094da4986bc950a0

 

https://www.zerocho.com/category/JavaScript/post/5741d96d094da4986bc950a0

 

www.zerocho.com