๐Ÿ’ก JS๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด scope๋ผ๋Š” ๊ฒƒ์„ ๋งŽ์ด ์ ‘ํ•ด๋ณด์…จ์„ํ…๋ฐ์š”, ์ €๋„ scope์— ๋Œ€ํ•ด์„œ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ์„ค๋ช…์„ ํ•ด๋‹ฌ๋ผํ•˜๋ฉด ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌ๊ฐ€ ์•ˆ๋˜๋”๋ผ๊ณ ์š”ใ… ใ…  ๊ทธ๋ž˜์„œ! ์˜ค๋Š˜์€ ํ™•์‹คํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ• ๊ฒŒ์š”! scope๋Š” Global Scope(์ „์—ญ ์Šค์ฝ”ํ”„), Local Scope(์ง€์—ญ ์Šค์ฝ”ํ”„) 2๊ฐœ์˜ ํƒ€์ž…์œผ๋กœ ๋‚˜๋ˆ  ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ์š” ๊ฐ๊ฐ์˜ ์ •์˜์™€ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


Scope(์Šค์ฝ”ํ”„)๋ž€?

์ •๋ง ๊ทธ๋ƒฅ ๋‹จ์ˆœํ•˜๊ฒŒ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
JS์—์„œ๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ฒŒ๋˜๋ฉด ์ž๋™์ ์œผ๋กœ ์ƒˆ๋กœ์šด Scope๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์–ด๋А ๊ณณ์—์„œ๋“ ์ง€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜, ํ•ด๋‹น ์ง€์—ญ์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ์š” ์ด๊ฒƒ์ด ๊ฐ๊ฐ Global Scope, Local Scope ์ž…๋‹ˆ๋‹ค.


Global Scope(์ „์—ญ ์Šค์ฝ”ํ”„), Local Scope(์ง€์—ญ ์Šค์ฝ”ํ”„)

์–ด๋А ์œ„์น˜์—์„œ๋“ ์ง€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” ์ „์—ญ ์Šค์ฝ”ํ”„์˜ ์œ ํšจ ๋ฒ”์œ„์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ์—์„œ ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์„ ์–ธ๋˜์–ด ์žˆ๋Š” duck ๋ณ€์ˆ˜๋Š” ์ „์—ญ ์Šค์ฝ”ํ”„ ์ž…๋‹ˆ๋‹ค.

var duck = '๊ธ€๋กœ๋ฒŒ ๋ฏธ๋”๋•'; // ์ „์—ญ ์Šค์ฝ”ํ”„

function duck_family() { // ์ง€์—ญ(ํ•จ์ˆ˜) ์Šค์ฝ”ํ”„
 var duck = '๋ฏธ๋”๋•';
 duck = '์ง€์—ญ ๋ฏธ๋”๋•';
}

duck_family(); // ์ง€์—ญ ๋ฏธ๋”๋•์œผ๋กœ ๋ณ€๊ฒฝ
console.log("Global Duck: ",duck); // ๋ฏธ๋”๋•

ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ duck์˜ ๊ฐ’์„ โ€˜์ง€์—ญ ๋ฏธ๋”๋•โ€™์ด๋ผ๊ณ  ๋ณ€๊ฒฝํ–ˆ์ฃ ? ๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ๋กœ ํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ ์ถœ๋ ฅ์„ ํ•ด๋ณด๋ฉด ์—ฌ์ „ํžˆ โ€˜๋ฏธ๋”๋•โ€™์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฐ”๋กœ ํ•จ์ˆ˜์˜ ์Šค์ฝ”ํ”„(์œ ํšจ๋ฒ”์œ„) ๋•Œ๋ฌธ์ธ๊ฑฐ์—์š”!


์‚ฌ์‹ค ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์ตœ๋Œ€ํ•œ ์ง€์–‘ํ•ด์•ผํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (์ €๋„ ์ด๊ฒƒ ๋•Œ๋ฌธ์— ์ผ์ฃผ์ผ ๋‚ด๋‚ด ์‚ฝ์งˆํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ต๋‹ˆ๋‹ค..๐Ÿ˜น)
ํ•จ์ˆ˜ ์™ธ๋ถ€์— ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค๋Š” ๊ฒƒ์€ window ๊ฐ์ฒด ๋‚ด๋ถ€์— ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

โœ‹์ž ๊น! ๊ทธ๋Ÿผ window ๊ฐ์ฒด๊ฐ€ ๋ญ๋ƒ๊ตฌ์š”?

๋ฐ”๋กœ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ชจ๋“  ์š”์†Œ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„, ๋ชจ๋“  ๋ณ€์ˆ˜๋“ค์„ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” parseInt(), isNaN()๊ณผ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋‚˜ location, history, document์™€ ๊ฐ™์€ ๊ฐ์ฒด๋“ค ์•„์‹œ์ฃ ? ์ด๋“ค์€ ๋ชจ๋‘ window์˜ ์ž์†๋“ค์ด์—์š”. ์ด์ฒ˜๋Ÿผ window๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— **๋ชจ๋“  ์ž์†๋“ค์˜ ์กฐ์ƒ**์ด๊ณ  ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•œ ์ „์—ญ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ window.parseInt()๋ผ๋Š” ํ˜•์‹์„ ์“ฐ์ง€ ์•Š๊ณ , parseInt()๋ผ๊ณ  ์“ฐ๋Š” ๊ฒƒ์ด์ฃ !

๊ทธ๋ž˜์„œ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ฒŒ ๋˜๋ฉด, window ๊ฐ์ฒด ์•ˆ์— ๋“ฑ๋ก์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ์ฒ˜๋Ÿผ์š”!!

var family = 'Duck Family';
window.family; // Duck Family


์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ ํ•จ์ˆ˜ ๋‚ด์— ์žˆ๋‹ค๊ณ  ํ•ด์„œ ์ „์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.
์•„๊นŒ์™€๋Š” ๋‹ฌ๋ฆฌ ํ•จ์ˆ˜ ๋‚ด์— var๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

var duck = '๋ฏธ๋”๋•';

function duck_family() {
 duck = '๋ฏธ๋”๋• ๋™์ƒ';
}

duck_family();
console.log(duck); // ๋ฏธ๋”๋• ๋™์ƒ

์ง ! ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๊ผˆ์ฃ ?
๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๊ฐ€ ์ง€์—ญ ์Šค์ฝ”ํ”„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ „์—ญ ์Šค์ฝ”ํ”„๋กœ ๋ฒ”์œ„๋ฅผ ์ ์ฐจ ๋„“ํ˜€๊ฐ€๋ฉฐ ์ฐพ์•„๋ณด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. duck_family() ๋ฒ”์œ„ ์•ˆ์— ๋ณ€์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ ์Šค์ฝ”ํ”„ ๋‚ด์— ์žˆ๋Š” duck ๋ณ€์ˆ˜๋ฅผ ์ฐพ์€๊ฑฐ์ฃ .


์ง€๊ธˆ๊นŒ์ง€ Global Scope(์ „์—ญ ์Šค์ฝ”ํ”„), Local Scope(์ง€์—ญ ์Šค์ฝฎ)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ! ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ์•Œ์•„๋ณด๊ธฐ๋Š” ์•„์‰ฌ์šฐ๋‹ˆ ๋” ๊นŠ์ด ์žˆ๋Š” ์Šค์ฝ”ํ”„ ์ง€์‹์„ ์œ„ํ•ด ๋‹ค์Œ์—๋Š” const, let๊ณผ ๊ด€๋ จํ•ด์„œ ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„์™€ ๋ธ”๋ก ์œ ํšจ๋ฒ”์œ„ ์Šค์ฝ”ํ”„์— ๋Œ€ํ•ด์„œ๋„ ์‚ดํŽด๋ณผ๊ฒŒ์š”!




์ฐธ๊ณ 

https://www.zerocho.com/category/JavaScript/post/5740531574288ebc5f2ba97e