๐Ÿธminzzi
Minzzi์•ผ
๐Ÿธminzzi
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (132)
    • ์˜ค๋ฅ˜ํ•ด๊ฒฐ (14)
    • FE (36)
      • Next.js (17)
      • React (4)
      • React Native (0)
      • TypeScript (1)
      • JavaScript (14)
    • BE (0)
      • Nest.js (0)
    • ๋ฐ๋ธŒ์ฝ”์Šค (7)
    • ์›น ํ”„๋กœ์ ํŠธ (5)
    • CS (28)
      • Algorithm (5)
      • Python (4)
      • C++ (2)
      • Operating System (4)
      • Computer Networking (3)
      • Data Structure (1)
      • Machine Learning (3)
      • Tip (6)
    • Github (4)
    • Flutter (3)
      • ํ”„๋กœ์ ํŠธ (3)
    • Private (3)
      • ํšŒ๊ณ  (7)
      • ๋ฉด์ ‘ (17)
    • ๊ฐœ๋ฐœ๋„์„œ (7)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ํ˜ธ์ด์ŠคํŒ…
  • ๋ ‰์‹œ์ปฌ
  • ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
  • ์ฝœ์Šคํƒ
  • ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
  • ์›์‹œํƒ€์ž…
  • ํž™์˜์—ญ
  • ๋ฉด์ ‘
  • next.js
  • reflow
  • ๋ชจ๋˜๋ฆฌ์•กํŠธ๋”ฅ๋‹ค์ด๋ธŒ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
  • ์˜ค๋ธ”์™„
  • ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
  • ์‹คํ–‰์ปจํƒ์ŠคํŠธ
  • ์‹คํ–‰์ปจํ…์ŠคํŠธ
  • react
  • layout shift
  • ์ด๋ฒคํŠธ๋ฃจํ”„
  • SSR

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๐Ÿธminzzi

Minzzi์•ผ

[JavaScript] ์‹คํ–‰ ์ปจํ…์ŠคํŠธ(execution context)
FE/JavaScript

[JavaScript] ์‹คํ–‰ ์ปจํ…์ŠคํŠธ(execution context)

2024. 7. 31. 12:54

๋“ค์–ด๊ฐ€๊ธฐ ์ „

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

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

- ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์Šค์ฝ”ํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹๋ณ„์ž์™€ ์‹๋ณ„์ž์— ๋ฐ”์ธ๋”ฉ๋œ ๊ฐ’์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

- ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ 

- ํด๋กœ์ €์˜ ๋™์ž‘ ๋ฐฉ์‹

- ํƒœ์Šคํ ํ์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์™€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๋™์ž‘ ๋ฐฉ์‹


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

์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ๋ชจ์•„๋†“์€ ๊ฐ์ฒด์ด๋‹ค. 

 

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


์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ 

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

 

์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” 1) ์ „์—ญ๊ณต๊ฐ„ 2) ํ•จ์ˆ˜ 3) eval() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋˜๋Š”๋ฐ,

eval์€ ์†๋„๋‚˜ ๋ณด์•ˆ์ด ์ข‹์ง€ ์•Š์•„ ๊ฑฐ์˜ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.


์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๊ตฌ์กฐ

์ €์žฅ๋˜๋Š” ํ™˜๊ฒฝ ์ •๋ณด๋“ค์€ ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™๋‹ค.

  • Variable Environment : ํ˜„์žฌ ์ปจํ…์ŠคํŠธ ๋‚ด์˜ ์‹๋ณ„์ž๋“ค์— ๋Œ€ํ•œ ์ •๋ณด + ์™ธ๋ถ€ ํ™˜๊ฒฝ ์ •๋ณด์ด๋‹ค. ์„ ์–ธ ์‹œ์ ์˜ Lexical Environment์˜ ์Šค๋ƒ…์ƒท์œผ๋กœ, ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š”๋‹ค. 
  • Lexical Environment : ์ฒ˜์Œ์—๋Š” Variable Environment์™€ ๊ฐ™์ง€๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜๋œ๋‹ค. 
  • This Binding : this ์‹๋ณ„์ž๊ฐ€ ๋ฐ”๋ผ๋ด์•ผ ํ•  ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Lexical Environment์™€ Variable Environment์— ๋‹ด๊ธฐ๋Š” ๋‚ด์šฉ์€ ์ฒ˜์Œ์—๋Š” ๊ฐ™์ง€๋งŒ Variable Environment๋Š” ์ตœ์กฐ ์Šค๋ƒ…์ƒท์„ ์œ ์ง€ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. Lexical Environment๋Š” Variable Environment๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๊ณ  ์ดํ›„์— Lexical Environment์ด ์ฃผ๋กœ ํ™œ์šฉ๋œ๋‹ค.

 

์ด ๋‘ ํ™˜๊ฒฝ์—์„œ๋Š” Environment Record์™€ Outer Environment Reference๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. 

  • Environment Record : ํ•จ์ˆ˜ ์•ˆ์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ์˜ ์‹๋ณ„์ž ์ •๋ณด(๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„, ํ•จ์ˆ˜ ์„ ์–ธ, ๋ณ€์ˆ˜๋ช… ๋“ฑ)๊ฐ€ ์ €์žฅ๋œ๋‹ค. ์ฆ‰ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ด๋ฏธ ํ•ด๋‹น ํ™˜๊ฒฝ์— ์†ํ•œ ์ฝ”๋“œ์˜ ๋ณ€์ˆ˜๋ช…์„ ๋ชจ๋‘ ์•Œ๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค. (ํ˜ธ์ด์ŠคํŒ…)
  • Outer Environment Reference(์™ธ๋ถ€ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ฐธ์กฐ) : ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ฆ‰ ํ˜„์žฌ environment record๋ณด๋‹ค ๋ฐ”๊นฅ์— ์žˆ๋Š” environment record๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ํ•ด๋‹น ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ ํ•จ์ˆ˜์˜ ๋ฐ”๊นฅ ํ™˜๊ฒฝ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋จผ์ € ์ฝ”๋“œ ์ƒ์—์„œ ํŠน์ •ํ•œ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์˜ Lexical Environment๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ , ๋ฐœ๊ฒฌ๋˜๋ฉด ๊ทธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ ๋‹ค์‹œ Outer Environment Record์— ๋‹ด๊ธด Lexical Environment๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. ์ „์—ญ ์ปจํ…์ŠคํŠธ์˜ Lexical Environment๊นŒ์ง€ ํƒ์ƒ‰ํ•ด์„œ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์˜ˆ์ œ๋กœ ์ดํ•ดํ•˜๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ

var a = 1;

function foo () {
    const b = 2;
    
    function bar () {
    	const c = 3;
        console.log(a + b + c);
    }
    bar();
}
foo(); // 6

1. ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ƒ์„ฑ ๋ฐ ํ™˜๊ฒฝ ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ์ „์—ญ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ฝœ์Šคํƒ์— ํ‘ธ์‹œ๋œ๋‹ค. ์ „์—ญ ์ปจํ…์ŠคํŠธ๋Š” ์‹คํ–‰ ๋ช…๋ น์ด ๋”ฐ๋กœ ์—†์–ด๋„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ๋“œ๋˜๋Š” ์ˆœ๊ฐ„ ์ „์—ญ ์ปจํ…์ŠคํŠธ๊ฐ€ ํ™œ์„ฑํ™” ๋œ๋‹ค. ์ „์—ญ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์ „์— ๋จผ์ € ํ‰๊ฐ€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์•„๋ž˜์™€ ๊ฐ™์€ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ฒŒ ๋œ๋‹ค. 

Environment Record์—๋Š” ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ์˜ ์‹๋ณ„์ž์˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์ปจํ…์ŠคํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํ›‘์œผ๋ฉด์„œ ์ˆœ์„œ๋Œ€๋กœ ์‹๋ณ„์ž๋“ค์„ ์ˆ˜์ง‘ํ•˜๋Š”๋ฐ ์ด๋•Œ ์ˆ˜์ง‘๋˜๋Š” ์‹๋ณ„์ž๋“ค์€ ๋งค๊ฐœ๋ณ€์ˆ˜, ํ•จ์ˆ˜, var๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๊ฐ€ ํ•ด๋‹น๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ foo์™€ var์ธ a๊ฐ€ ์‹๋ณ„์ž๋กœ ๋“ฑ๋ก์ด ๋œ ๊ฒƒ์ด๋‹ค. (ํ˜ธ์ด์ŠคํŒ…)

 

var a๊ฐ€ ์•„์ง undefined์ธ ์ด์œ ๋Š” ํ• ๋‹น ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๋งŒ ์ง„ํ–‰์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Lexical Environment
- Environment Record : a = undefined, foo = Function Object
- Outer Environment Reference : null(์ „์—ญ์ด๊ธฐ ๋•Œ๋ฌธ์—)

2. ์ „์—ญ ์ฝ”๋“œ ์‹คํ–‰

์ฝœ์Šคํƒ์— ์ „์—ญ ์ปจํ…์ŠคํŠธ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด Lexical Environment๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๊ณ  a์˜ ๊ฐ’์ด 1๋กœ ํ• ๋‹น๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  foo ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

Lexical Environment
- Environment Record : a = 1, foo = Function Object
- Outer Environment Reference : null(์ „์—ญ์ด๊ธฐ ๋•Œ๋ฌธ์—)

3. foo ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ƒ์„ฑ ๋ฐ ํ™˜๊ฒฝ ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ

fooํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ foo์— ๋Œ€ํ•œ ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•ด์„œ foo ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ฝœ ์Šคํƒ์— ๋‹ด๋Š”๋‹ค. ์ด๋•Œ foo ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์˜ ์ตœ์ƒ์œ„, ์ฆ‰ ์‹คํ–‰ ์ค‘์ธ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋œ๋‹ค.

Lexical Environment
- Environment Record : b = undefined, bar = Function Object
- Outer Environment Reference : Global Lexical Environment

4. foo()ํ•จ์ˆ˜ ์‹คํ–‰

์ฝœ์Šคํƒ์— foo() ํ•จ์ˆ˜ ์ปจํ…์ŠคํŠธ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด Lexical Environment๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๊ณ  b์˜ ๊ฐ’์ด 2๋กœ ํ• ๋‹น๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  bar ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

Lexical Environment
- Environment Record : b = 2, bar = Function Object
- Outer Environment Reference : Global Lexical Environment

5. bar ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ƒ์„ฑ ๋ฐ ํ™˜๊ฒฝ ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ

barํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ bar์— ๋Œ€ํ•œ ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•ด์„œ bar ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ฝœ ์Šคํƒ์— ๋‹ด๋Š”๋‹ค. ์ด๋•Œ bar ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์Šคํƒ์˜ ์ตœ์ƒ์œ„, ์ฆ‰ ์‹คํ–‰ ์ค‘์ธ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋œ๋‹ค.

Lexical Environment
- Environment Record : c = undefined
- Outer Environment Reference : foo() Lexical environment

6. bar() ํ•จ์ˆ˜ ์‹คํ–‰

์ฝœ์Šคํƒ์— bar() ํ•จ์ˆ˜ ์ปจํ…์ŠคํŠธ์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด Lexical Environment๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๊ณ  c์˜ ๊ฐ’์ด 3์œผ๋กœ ํ• ๋‹น๋œ๋‹ค. 

 

Lexical Environment
- Environment Record : c = undefined
- Outer Environment Reference : foo() Lexical environment

 

console.log(a + b + c);

1. console ์‹๋ณ„์ž ๊ฒ€์ƒ‰

ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” bar ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์ด๋‹ค. console ์‹๋ณ„์ž๋Š” ์ „์—ญ ๊ฐ์ฒด์—์„œ ๊ฐ์ฒด ํ™˜๊ฒฝ ๋ ˆ์ฝ”๋“œ์˜ BindingObject๋ฅผ ํ†ตํ•ด ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์Šค์ฝ”ํ”„ ์ฒด์ธ์„ ํ†ตํ•ด bar, foo, global ์ˆœ์œผ๋กœ ์‹๋ณ„์ž๋ฅผ ์ฐพ๊ฒŒ ๋œ๋‹ค.

2. a, b, c ์‹๋ณ„์ž ๊ฒ€์ƒ‰

c ์‹๋ณ„์ž๋Š” bar ์ปจํ…์ŠคํŠธ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์—์„œ, b ์‹๋ณ„์ž๋Š” ์™ธ๋ถ€ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋กœ ์ด์–ด์ง€๋Š” foo ํ•จ์ˆ˜ ์ปจํ…์ŠคํŠธ์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์—์„œ, a ์‹๋ณ„์ž๋Š” foo์—์„œ์˜ ์™ธ๋ถ€ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋กœ ์ด์–ด์ง€๋Š” global ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์—์„œ ๊ฒ€์ƒ‰๋œ๋‹ค.

 

7. bar ํ•จ์ˆ˜ ์ฝ”๋“œ ์‹คํ–‰ ์ข…๋ฃŒ

๋”์ด์ƒ ์‹คํ–‰ํ•  ์ฝ”๋“œ๊ฐ€ ์—†๋‹ค๋ฉด bar ํ•จ์ˆ˜ ์ฝ”๋“œ์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋œ๋‹ค. ์ด๋•Œ ์ฝœ์Šคํƒ์—์„œ bar ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ pop ๋˜์–ด ์ œ๊ฑฐ๋˜๊ณ  foo ์‹คํ–‰์ปจํ…์ŠคํŠธ๊ฐ€ ์‹คํ–‰์ค‘์ธ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋œ๋‹ค.

 

์ฝœ์Šคํƒ์—์„œ barํ•จ์ˆ˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ๋‹ค๊ณ  ํ•ด์„œ bar ํ•จ์ˆ˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ๊นŒ์ง€ ์ฆ‰์‹œ ์†Œ๋ฉธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์€ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ์˜ํ•ด ์ฐธ์กฐ๋˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด์ด๋‹ค. ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ๊ฐ’์€ ๋ˆ„๊ตฐ๊ฐ€์— ์˜ํ•ด ์ฐธ์กฐ๋˜์ง€ ์•Š์„ ๋•Œ ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ(GC)์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ํ™•๋ณด๊ฐ€ ํ•ด์ œ๋˜์–ด ์†Œ๋ฉธํ•œ๋‹ค.

 

bar ํ•จ์ˆ˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์†Œ๋ฉธ๋˜์—ˆ๋‹ค ํ•˜๋”๋ผ๋„ ๋งŒ์•ฝ bar ํ•จ์ˆ˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์„ ๋ˆ„๊ตฐ๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค๋ฉด barํ•จ์ˆ˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์€ ์†Œ๋ฉธํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

8. foo ํ•จ์ˆ˜ ์ฝ”๋“œ ์‹คํ–‰ ์ข…๋ฃŒ

foo ํ•จ์ˆ˜ ์—ญ์‹œ ๋”์ด์ƒ ์‹คํ–‰ํ•  ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฉด foo ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜๊ณ  ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋œ๋‹ค.

9. ์ „์—ญ ์ฝ”๋“œ ์‹คํ–‰ ์ข…๋ฃŒ

์ „์—ญ ์ฝ”๋“œ๋„ ์‹คํ–‰ํ•  ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ฝœ์Šคํƒ์—์„œ pop๋˜์–ด ์Šคํƒ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋‚จ์•„์žˆ์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

๋”๋ณด๊ธฐ

์ฐธ๊ณ 

https://heycoding.tistory.com/86

https://velog.io/@edie_ko/js-execution-context

(์ฑ…) ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋”ฅ๋‹ค์ด๋ธŒ

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'FE > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JavaScript] ๋ณ€์ˆ˜์˜ ์žฌํ• ๋‹น ๊ณผ์ •  (0) 2024.06.19
[JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ์ž์—ด ๋ฐ˜๋ณต ๋ฉ”์†Œ๋“œ repeat()  (0) 2024.04.04
[JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ตœ๋Œ€/์ตœ์†Œ ์ •์ˆ˜๊ฐ’ MAX_SAFE_INTEGER/MIN_SAFE_INTEGER  (0) 2024.04.04
[JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ •์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๋Š” Number.isInteger() ๋ฉ”์†Œ๋“œ  (0) 2024.04.01
[JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Œ€์†Œ๋ฌธ์ž ๋ณ€๊ฒฝํ•˜๊ธฐ toUpperCase(), toLowerCase()  (0) 2024.03.31
    'FE/JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JavaScript] ๋ณ€์ˆ˜์˜ ์žฌํ• ๋‹น ๊ณผ์ •
    • [JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ์ž์—ด ๋ฐ˜๋ณต ๋ฉ”์†Œ๋“œ repeat()
    • [JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ตœ๋Œ€/์ตœ์†Œ ์ •์ˆ˜๊ฐ’ MAX_SAFE_INTEGER/MIN_SAFE_INTEGER
    • [JavaScript] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ •์ˆ˜์ธ์ง€ ํ™•์ธํ•˜๋Š” Number.isInteger() ๋ฉ”์†Œ๋“œ
    ๐Ÿธminzzi
    ๐Ÿธminzzi

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”