๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
javascript, node

์‹คํ–‰ ์ปจํ…์ŠคํŠธ(Execution Context) - Outer

by devyongi 2022. 1. 2.

๐Ÿ‘‰Outer์™€ ์Šค์ฝ”ํ”„์ฒด์ด๋‹

๐Ÿ’ก Outer : ์ด์ „ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ํƒ€๊ณ ํƒ€๊ณ  ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
์ •์‹ ๋ช…์นญ : Outer Enviroment Reference(์™ธ๋ถ€ ํ™˜๊ฒฝ ์ฐธ์กฐ)
๐Ÿ’ก Scope Chaining : ์ƒ์œ„ ์Šค์ฝ”ํ”„์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

Outer๋ฅผ ํ†ตํ•ด Scope Chaining์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

Outer๋Š” ํ˜„์žฌ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์—์„œ ์ฐธ์กฐํ•  ์‹๋ณ„์ž๊ฐ€ ์—†๋‹ค๋ฉด, ์ด์ „์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์œผ๋กœ ๊ฐ€์„œ ์‹๋ณ„์ž๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด๋ ‡๊ฒŒ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ฐพ์•„ ๋‚ด๋ ค๊ฐ€๊ณ , ์‹๋ณ„์ž๋ฅผ ๋ฐœ๊ฒฌํ•œ๋‹ค๋ฉด ๊ทธ ์‹๋ณ„์ž์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ  ๋” ์ด์ƒ ์ด์ „ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์œผ๋กœ ๋‚ด๋ ค๊ฐ€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ฝœ์Šคํƒ ๊ณต๊ฐ„์•ˆ์— ๋™์ผํ•œ ์‹๋ณ„์ž๊ฐ€ ์—ฌ๋Ÿฟ์ด์–ด๋„ ๊ฐ’์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์„ ์‹๋ณ„์ž ๊ฒฐ์ •์ด๋ผ๊ณ  ํ•œ๋‹ค.

์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž.

let food = "๋ฐฅ";

function ์ค‘๊ตญ์ง‘() {  
let food = "์งœ์žฅ๋ฉด";

    function ๊ณ ๊ธฐ์ง‘() {  
    let food = "์‚ผ๊ฒน์‚ด";

        function ๋ถ„์‹์ง‘() {
          console.log(food);
          console.trace();
        }
        ๋ถ„์‹์ง‘();
    }  
    ๊ณ ๊ธฐ์ง‘();  
}  
์ค‘๊ตญ์ง‘();

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ฝœ์Šคํƒ์— ์Œ“์ด๊ณ , outer๋กœ ์Šค์ฝ”ํ”„์ฒด์ด๋‹์ด ๋˜๋Š” ์ƒํƒœ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ํ™œ์„ฑํ™” ๋œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ(์ œ์ผ ์œ„์— ์Œ“์ธ ์ปจํ…์ŠคํŠธ)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ์„œ food์˜ ๊ฐ’์„ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. ํ™œ์„ฑํ™” ๋œ ๋ถ„์‹์ง‘ ํ•จ์ˆ˜์— food์‹๋ณ„์ž๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— outer๋ฅผ ํ†ตํ•ด ์ด์ „์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ์„ ์ฐธ์กฐํ•˜์—ฌ ๊ณ ๊ธฐ์ง‘ ํ•จ์ˆ˜์— ์žˆ๋Š” โ€œ์‚ผ๊ฒน์‚ดโ€์„ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋” ์ด์ƒ ๋‚ด๋ ค๊ฐ€์ง€ ์•Š๊ณ  ์ถœ๋ ฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— โ€œ์‚ผ๊ฒน์‚ดโ€ ์ด๋ผ๋Š” ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

๋ฐ‘์— ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

let food = "๋ฐฅ";

function ์ค‘๊ตญ์ง‘() {  
let food = "์งœ์žฅ๋ฉด";  
๊ณ ๊ธฐ์ง‘();  
}

function ๊ณ ๊ธฐ์ง‘() {  
let food = "์‚ผ๊ฒน์‚ด";  
๋ถ„์‹์ง‘();  
}

function ๋ถ„์‹์ง‘() {  
console.log(food);  
console.trace();  
}

์ค‘๊ตญ์ง‘();  

์ด ์ฝ”๋“œ๋Š” ์–ธ๋œป๋ณด๋ฉด ์œ„์— ์ฝ”๋“œ์™€ ๋น„์Šทํ•ด๋ณด์ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋˜‘๊ฐ™์ด ์ค‘๊ตญ์ง‘ ํ•จ์ˆ˜์•ˆ์—์„œ ๊ณ ๊ธฐ์ง‘ ํ•จ์ˆ˜๋ฅผ ๊ณ ๊ธฐ์ง‘ ํ•จ์ˆ˜์•ˆ์—์„œ ๋ถ„์‹์ง‘ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ƒํƒœ์ด๋‹ค. ์‹ฌ์ง€์–ด ์ฝœ์Šคํƒ์— ์Œ“์ด๋Š” ์ˆœ์„œ๋„ ๋˜‘๊ฐ™๋‹ค. (console.trace()๋ฅผ ํ†ตํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค) ํ•˜์ง€๋งŒ, ์ด ์ฝ”๋“œ์—์„œ food์˜ ๊ฐ’์€ โ€œ์‚ผ๊ฒน์‚ดโ€์ด ์•„๋‹Œ โ€œ๋ฐฅโ€์„ ์ถœ๋ ฅํ•œ๋‹ค.

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

ํ•˜์ง€๋งŒ, ๋‘๋ฒˆ์งธ ์ฝ”๋“œ๋Š” ๋ชจ๋“  ํ•จ์ˆ˜๋“ค์ด ๊ธ€๋กœ๋ฒŒ์—์„œ ์„ ์–ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ํ˜ธ์ถœ์ด ๋‹ค๋ฅธ ํ•จ์ˆ˜ ์•ˆ์—์„œ ์ด๋ฃจ์–ด์กŒ๋‹ค๊ณ  ํ•ด๋„ ์„ ์–ธ๋œ ๊ณณ์„ ๊ธฐ์ค€์œผ๋กœ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋Š” ๋ชจ๋‘ ๊ธ€๋กœ๋ฒŒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„์‹์ง‘ ์•ˆ์—์„œ food๋ฅผ ์ฐพ์ง€ ๋ชปํ•  ๊ฒฝ์šฐ ๊ธ€๋กœ๋ฒŒ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์Šค์ฝ”ํ”„์ฒด์ด๋‹ ๋ฒ”์œ„๊ฐ€ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ์™€ ๋‹ค๋ฅด๊ฒŒ ๋˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค.

์•„์ง ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„์•ผํ•  ๋‚ด์šฉ๋“ค์ด ๋งŽ์€ ๊ฒƒ ๊ฐ™๋‹ค. ๋” ๊ณต๋ถ€ํ•˜๊ณ  ํ™•์‹คํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด์ž.

๋Œ“๊ธ€