[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] ๋ถ€ํŠธ์บ ํ”„ - ์Šค์ฝ”ํ”„, ํด๋กœ์ €

JiEunยท2023๋…„ 3์›” 5์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

๋‹จ์‹œ๊ฐ„์— ๋งŽ์€ ์ •๋ณด๋ฅผ ๋„ฃ์œผ๋ ค๊ณ  ํ•˜๋‹ˆ ์˜คํžˆ๋ ค ์ง‘์ค‘ํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค.
์ด๋ฒˆ ํ•™์Šต์€ ์Šค์ฝ”ํ”„, ํด๋กœ์ € ๊ทธ๋ฆฌ๊ณ  ๊ธฐํƒ€ ๋ฌธ๋ฒ•์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.

๋งˆ์ง€๋ง‰ ๋ผ์ด๋ธŒ ์„ธ์…˜์—์„œ ๋ธ”๋กœ๊ทธ ์ž‘์„ฑ๋ฒ• ๋“ฑ์„ ์„ค๋ช…ํ•˜๋ฉด์„œ
๋‚˜๋„ ์กฐ๊ธˆ ์”ฉ ๋ณ€๊ฒฝํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.


๐Ÿ“ ๋ฐฐ์šด ๊ฒƒ

๐Ÿ“Œ ์Šค์ฝ”ํ”„(scope) : ๋ณ€์ˆ˜์˜ ์œ ํšจ ๋ฒ”์œ„

  • ์•ˆ ์ชฝ ์Šค์ฝ”ํ”„์—์„œ ๋ฐ”๊นฅ ์ชฝ ์Šค์ฝ”ํ”„๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ๋ฐ˜๋Œ€๋Š” ๋ถˆ๊ฐ€๋Šฅ
  • ์ „์—ญ ์Šค์ฝ”ํ”„(Global scope : ๊ฐ€์žฅ ๋ฐ”๊นฅ ์Šค์ฝ”ํ”„), ์ง€์—ญ ์Šค์ฝ”ํ”„(Local scope : ์ „์—ญ ์Šค์ฝ”ํ”„ ๋‚ด๋ถ€์— ์žˆ๋Š” ์Šค์ฝ”ํ”„)
  • ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜ ๋ณด๋‹ค ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง
  • ์ข…๋ฅ˜๋Š” ๋ธ”๋ก ์Šค์ฝ”ํ”„(block scope : ์ค‘๊ด„ํ˜ธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ), ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„(function scope : function ํ‚ค์›Œ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”)๊ฐ€ ์žˆ๋‹ค.
  • but, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ๋Š” ๋ฒ”์œ„๋Š” block scope
  • ์œ„๊ณ„์ ์œผ๋กœ ๊ฒน์น  ๊ฒฝ์šฐ ์•ˆ ์ชฝ ์Šค์ฝ”ํ”„ ๋ถ€ํ„ฐ ๋ฐ”๊นฅ ์Šค์ฝ”ํ”„ ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์Šค์ฝ”ํ”„ ์ฒด์ด๋‹์ด ์ผ์–ด๋‚œ๋‹ค.

    ์ •์  ์Šค์ฝ”ํ”„(Static scope, Lexical scope)

    ํ•จ์ˆ˜๋Š” ํ•œ ๋ฒˆ๋งŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ •์˜๋˜๋ฉด ๋‹ค๋ฅธ๊ณณ์— ๋˜ ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

    strict mode

    ๋ธŒ๋ผ์šฐ์ € ๋ณด๋‹ค ์—„๊ฒฉํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค์–ด ์ค€๋‹ค.
    "์„ ์–ธ ์—†๋Š” ๋ณ€์ˆ˜ ํ• ๋‹น"์˜ ๊ฒฝ์šฐ strict mode๋Š” ์—๋Ÿฌ๋กœ ํŒ๋‹จ.
    (js ํŒŒ์ผ ์ƒ๋‹จ์— ์ž…๋ ฅ 'strict mode')

๐Ÿ“Œ ํด๋กœ์ €(closure) : ํ•จ์ˆ˜์™€ ๊ทธ ํ•จ์ˆ˜๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ์กฐํ•ฉ

  • ํ•จ์ˆ˜์™€ ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ์–ดํœ˜์ (lexical)ํ™˜๊ฒฝ์˜ ์กฐํ•ฉ
  • ํด๋กœ์ € ์ƒ์„ฑ๋œ ์‹œ์ ์˜ ์œ ํšจ ๋ฒ”์œ„๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ์ง€์—ญ๋ณ€์ˆ˜
  • ํ•จ์ˆ˜๋ฅผ ํ•จ์ˆ˜ ์•ˆ์— ์ •์˜ํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ํ•จ์ˆ˜์˜ ๋ถ€๋ชจ ํ•จ์ˆ˜์˜ ์Šค์ฝ”ํ”„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํด๋กœ์ €๋ฅผ ์ด์šฉํ•˜๋ฉด ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๋Š” ํ•จ์ˆ˜, ์ปค๋ง, ๋ชจํŠค ํŒจํ„ด์œผ๋กœ ํ™œ์šฉ

๐Ÿ“ ์ค‘์š”ํ•œ ๋ถ€๋ถ„

๐Ÿ“Œ spread ๋ฌธ๋ฒ•

  • ์ฃผ๋กœ ๋ฐฐ์—ด์„ ํ’€์–ด์„œ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ๋ฐฐ์—ด์„ ํ’€์–ด์„œ ๊ฐ๊ฐ์˜ ์š”์†Œ๋กœ ๋„ฃ์„ ๋–„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํ‚ค ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ํ‚ค ๊ฐ’์œผ๋กœ ๋ฎ์–ด ์”Œ์šด๋‹ค.
  • ๋ณต์‚ฌํ•  ๋ฐฐ์—ด ์•ž์— ...์„ ๋ถ™์—ฌ ์ค€๋‹ค.
const num = [1,2,3];
const newNum = [...num];

console.log(numNum); // 1,2,3

๐Ÿ“Œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(arrow function) : ํ•จ์ˆ˜ ํ‘œํ˜„์‹์—์„œ ์ˆ˜์ •๋จ

//arrow function
const a = (x) => {
	์‹คํ–‰ ์ฝ”๋“œ
}

//ํ•จ์ˆ˜ ํ‘œํ˜„์‹
function a(x){
	์‹คํ–‰ ์ฝ”๋“œ
}

๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ผ ๋•Œ (,) ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

const a = (x) => {
	์‹คํ–‰ ์ฝ”๋“œ
}

const a = x => {}
// ๋‹จ, ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ 2๊ฐœ ์ผ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

โœ๏ธ ๋งˆ์น˜๋ฉฐ

์Šค์ฝ”ํ”„, ํด๋กœ์ € ๋ถ€๋ถ„์„ ์„ธ์„ธํ•˜๊ฒŒ ๋ฐฐ์šธ ์ˆ˜๋ก ์–ด๋ ค์›Œ ์ง„ ๊ฑฐ ๊ฐ™๋‹ค.
๋จธ๋ฆฟ ์†์œผ๋ก  ์ดํ•ด ํ•ด๋„ ๋ง๋กœ ์„ค๋ช…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ์ข€ ๋” ๊ฐš๊ฒŒ ํŒŒ๊ณ  ๋“ค๋ฉด
์ปค๋ง, ๋ชจ๋“ˆํŒจํ„ด๋„ ์žˆ๋‹ค. ์ด๋ถ€๋ถ„๋„ ์ถ”ํ›„ ๋‹ค์‹œ ์•Œ์•„๋ณผ๊นŒํ•œ๋‹ค.

์ด๋ฒˆ ๋ผ์ด๋ธŒ ์„ธ์…˜ ๋งˆ์ง€๋ง‰์—๋Š” ๋”ฅ ํ† ํฌ ํšŒ๊ณ ๋ผ๊ณ  ๋‹ค๋ฅธ ์ˆ˜๊ฐ•์ƒ๋ถ„๋“ค๊ณผ
์ด์•ผ๊ธฐ ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค. ๋•๋ถ„์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์–ด๋–ค ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š”์ง€,
์–ด๋–ค ๊ณ ๋ฏผํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋˜ ์†Œ์ค‘ํ•œ ์‹œ๊ฑด์ด์˜€๋‹ค.

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

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

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