๐Ÿธ [JavaScript] scope

hnyoojinยท2024๋…„ 9์›” 3์ผ

๐Ÿธ JS ๋งˆ์Šคํ„ฐ ๋˜๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
12/19
post-thumbnail

1-12์žฅ ๋‚ด์šฉ์„ ์Šคํ„ฐ๋””๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ, var, let, const์˜ ์„ ์–ธ๊ณผ ๊ฐ’ ํ• ๋‹น์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด๋‹ค.

๊ทธ ๊ณผ์ •์—์„œ ์™œ ES6์—์„œ let๊ณผ const๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋Š”์ง€, ์ด๋ฅผ ์ถ”๊ฐ€ํ•ด ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ–ˆ๋Š”์ง€ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ด๊ฐ€ ๋˜์–ด์„œ ๊ธฐ๋ถ„์ด ๋„ˆ๋ฌด ์ข‹์•˜๋‹ค.


์‚ฌ์‹ค ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋ฉด์„œ, '์ด๋ ‡๊ฒŒ ์ค‘์š”ํ•œ ๋‚ด์šฉ์„ ์™œ ์ฑ…์—์„  ๋‹ค๋ฃจ์ง€ ์•Š์•˜์„๊นŒ?' ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋Š”๋ฐ,,,,

์˜ค๋Š˜ ์ฑ…์„ ํ•œ ์žฅ ๋” ๋„˜๊ฒจ๋ณด๋‹ˆ ๋ฐ”๋กœ scope์— ๋Œ€ํ•œ ๋‚ด์šฉ, ์ด์–ด์„œ let๊ณผ const ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ์—ฐ๋‹ฌ์•„ ๋‚˜์™”๋‹ค.

๊ทธ๋ž˜์„œ ์•ฝ๊ฐ„ ์‹ ๋‚˜๋Š” ๋งˆ์Œ์œผ๋กœ ๊ณต๋ถ€๋ฅผ ํ•ด๋ณด์•˜๋‹ค!

๋‚ด์šฉ ์ž์ฒด๊ฐ€ ์žฌ๋ฐŒ๋‹ค๊ธฐ ๋ณด๋‹ค๋Š”, ๊ณต๋ถ€ํ•˜๊ณ  ๊ถ๊ธˆํ–ˆ๋˜ ์ ์„ ์„œ๋กœ ์ด์•ผ๊ธฐํ•˜๊ณ , ๋˜ ์ด๋ฅผ ํ•ด๊ฒฐํ•ด๋ƒˆ๋Š”๋ฐ, ์ฑ…์—์„œ๋„ ๋ฐ”๋กœ ์ด์–ด์„œ ๊ทธ ๋‚ด์šฉ์ด ๋‚˜์˜ค๋Š” ๊ฑธ ๋ณด๋‹ˆ,, ๋ญ”๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ ํ˜ธ๊ธฐ์‹ฌ์ด ๊ณต๋ถ€๋ฅผ ์ œ๋Œ€๋กœ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ฆ๋ช…๊ฐ™์•„์„œ,,,,,,,,


์•„๋ฌดํŠผ ์ด์ œ scope์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.



scope ์Šค์ฝ”ํ”„

๋ชจ๋“  ์‹๋ณ„์ž๋Š”, ์„ ์–ธ๋œ ์œ„์น˜์— ์˜ํ•ด ์œ ํšจ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋˜๊ณ , ์ด๋ฅผ scope๋ผ๊ณ  ํ•œ๋‹ค.

JavaScript ์—”์ง„์€ code ์‹คํ–‰์‹œ code์˜ ๋ฌธ๋งฅ์„ ๊ณ ๋ คํ•œ๋‹ค.

์ด๋ฆ„์ด ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์„๋•Œ๋Š”, ๋‘ ๋ณ€์ˆ˜์˜ scope๋ฅผ ๊ณ ๋ คํ•ด์„œ, ์–ด๋–ค ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

๋งŒ์•ฝ ์ด๋•Œ scope๋ผ๋Š” ๊ฐœ๋…์ด ์—†๋‹ค๋ฉด?

์œ ์—ฐํ•œ JavaScript ์—”์ง„์ด๋ผ๊ณ  ํ• ์ง€๋ผ๋„ ์ถฉ๋Œ์„ ํ”ผํ• ์ˆ˜๋Š” ์—†์„ ๊ฒƒ์ด๋‹ค.

ํ•˜๋‚˜์˜ scope์—๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ ์‹๋ณ„์ž๊ฐ€ ๋‘˜ ์ด์ƒ ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค.

ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค.

ํ•˜๋‚˜์˜ ํŒŒ์ผ ์•ˆ์—, ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ฌธ์„œ๋ฅผ ๋‘ ๊ฐœ ์ด์ƒ ๋งŒ๋“ค ์ˆ˜๋Š” ์—†๋‹ค.

์ด๋•Œ์˜ ํŒŒ์ผ์ด scope์ด๊ณ , ๋ฌธ์„œ๊ฐ€ ๋ณ€์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ์ข‹๋‹ค.

lexical environment

JavaScript๊ฐ€ code์˜ ๋ฌธ๋งฅ์„ ๊ณ ๋ คํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.

์ด๋•Œ ๋ฌธ๋งฅ์ด๋ผ๋Š” ๊ฒŒ ์–ด๋–ค ์˜๋ฏธ์ผ๊นŒ?

code๊ฐ€ ์–ด๋””์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ์‹คํ–‰๋˜๋Š” ์ง€์ ์˜ ์ฃผ๋ณ€์—๋Š” ์–ด๋–ค code๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ lexical environment ๋ผ๊ณ  ํ•œ๋‹ค.

์ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด execution context, ์ฆ‰ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์ด๋‹ค.


[์ฐธ๊ณ  ์ •๋ฆฌ ๊ฐœ๋…]

  • global code
    ์–ด๋””์—์„œ๋“  ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • local code
    ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ๋งŒ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.


scope chain

์•ž์„œ ์‚ดํŽด๋ณธ ํ•จ์ˆ˜์—์„œ, ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ–ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ํ•จ์ˆ˜ ๋ชธ์ฒด ๋‚ด๋ถ€์—์„œ๋งŒ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ local code๋„ ์ค‘์ฒฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋“ค์˜ scope๋„ ์ค‘์ฒฉ์ด ๋˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ์„œ๋กœ ์ค‘์ฒฉ ์—ฐ๊ฒฐ๋˜์— ๊ณ„์ธต์ ์ธ ํ˜•ํƒœ๋ฅผ ๋„๋Š” scope๋“ค์„ scope chain ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ๋•Œ, JavaScript ์—”์ง„์ด scope chain์„ ๊ฐ€์ง€๊ณ  ์–ด๋–ค ์ผ์„ ํ•  ์ง€ ์ƒ์ƒ์ด ๊ฐ€๋Š”๊ฐ€?

JavaScript ์—”์ง„์€, scope chain์„ ๋”ฐ๋ผ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” scope์—์„œ๋ถ€ํ„ฐ, ์ƒ์œ„ scope๋กœ ์ด๋™ํ•˜๋ฉด์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.


์ •๋ฆฌํ•˜์ž๋ฉด scope๋ผ๋Š” ๊ฒƒ์€ ๋ณ€์ˆ˜๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ทœ์น™์ด๋‹ค.

์ข€ ๋” ์—„๋ฐ€ํžˆ ๋งํ•˜์ž๋ฉด, ์‹๋ณ„์ž๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ทœ์น™์ด๋‹ค.

scope๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์€ ๋ณ€์ˆ˜ ๋ฟ ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜๋„ ์žˆ๋‹ค..!

ํ•จ์ˆ˜ ๋ ˆ๋ฒจ scope

๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ๋Š”, ํ•จ์ˆ˜๋ฟ ์•„๋‹ˆ๋ผ ๋ชจ๋“  code block์ด local scope๋ฅผ ๋งŒ๋“ ๋‹ค.

์ด๋ฅผ block level scope๋ผ๊ณ  ํ•˜๋ฉฐ, ES6์—์„œ ๋„์ž…๋œ let๊ณผ const๊ฐ€ block level scope๋ฅผ ์ง€์›ํ•œ๋‹ค.

๋ฐ˜๋ฉด var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š”,
ํ•จ์ˆ˜์˜ code block๋งŒ์„ local scope๋กœ ์ธ์ •ํ•œ๋‹ค.

์ด๋ฅผ ํ•จ์ˆ˜ ๋ ˆ๋ฒจ scope๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ํ•จ์ˆ˜ ๋ฐ–์˜ code block ์•ˆ์—์„œ var ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š”?

์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


lexical scope

dynamic scope

ํ•จ์ˆ˜๋ฅผ ์–ด๋””์—์„œ ํ˜ธ์ถœํ–ˆ๋Š”๊ฐ€?์— ๋”ฐ๋ผ scope๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ์‹œ์ ์— ๋™์ ์œผ๋กœ ์ƒ์œ„ scope๋ฅผ ๊ฒฐ์ •ํ•ด์•ผํ•œ๋‹ค.

.. ์ด๋Ÿฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋ฅผ ๊ณต๋ถ€ํ•ด๋ณธ ์ ์ด ์žˆ๋Š”๊ฐ€..?

๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ๋Š” lexical scope ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

lexical scope

ํ•จ์ˆ˜๋ฅผ ์–ด๋””์—์„œ ์ •์˜ํ–ˆ๋Š”๊ฐ€?์— ๋”ฐ๋ผ scope๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด ํ•จ์ˆ˜๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๊ฐ์ฒด๊ฐ€ ์ƒ์œ„ scope๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ ๋•Œ๋งˆ๋‹ค ์ƒ์œ„ scope๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ๋œ๋‹ค.



var ํŠน์ง•์ ์ธ scope๋ฅผ ์ •๋ฆฌํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŒŒํŠธ์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€