JavaScript ์ฃผ์š” ๋ฌธ๋ฒ•

๊ฐ•์‚ฌ : ์ด์„ ํ˜‘ ๊ฐ•์‚ฌ๋‹˜ (ํ˜„ Cobalt ์ˆ˜์„ ๊ฐœ๋ฐœ์ž)
MBTI๊ฐ€ ์˜ˆ์ „์— ๊ฒ€์‚ฌํ•˜์…จ์„ ๋• ESFP์˜€๋‹ค๊ณ  ํ•˜์…จ๋Š”๋ฐ ๋‚˜๋ž‘ ๊ฐ™์œผ์…”์„œ ๋ญ”๊ฐ€ ๊ธฐ๋ถ„์ด ๋ฌ˜ํ–ˆ๋‹ค ๐Ÿ˜Ž

๊ฐ•์˜ ์ปจ์…‰

์ฒซ ํ•œ ๋‹ฌ ๊ฐ„์€ ๊ธฐ๋ณธ๊ธฐ์™€ ์ƒ์‹์— ์ง‘์ค‘ํ•˜์‹ ๋‹ค๊ณ  ํ•˜์…จ๋‹ค
๊ฐœ๋ฐœ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ญ๋“  ๊ธฐ์ดˆ๊ฐ€ ์ œ์ผ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋ˆ„๊ตฌ๋‚˜ ์•Œ ๊ฒƒ์ด๋‹ค

๋‚œ ์ด๋•Œ๊นŒ์ง€ ๊ฒ‰ํ•ฅ๊ธฐ ์‹์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ฐ๋จน์œผ๋กœ ๋ฐฐ์šด ๋А๋‚Œ์ด๋ผ
์ด๋ฒˆ ๋ฐ๋ธŒ์ฝ”์Šค๋ฅผ ํ†ตํ•ด ์–ด์ฉŒ๋ฉด ๋งˆ์ง€๋ง‰ ๊ธฐํšŒ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ดˆ์‹ฌ์„ ์ฐพ์•„ ๊ณต๋ถ€ํ•  ๊ฒƒ์ด๋‹ค

  1. ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  2. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  3. ๋ธŒ๋ผ์šฐ์ €
  4. ์ปดํ“จํ„ฐ ๊ณผํ•™ ์ƒ์‹
  5. ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ

์ด๋ ‡๊ฒŒ 5๊ฐœ์˜ ์„น์…˜์„ ๋‚˜๋ˆ„์–ด์„œ ๊ฐ•์˜ํ•  ์˜ˆ์ •์ด๋ผ๊ณ  ํ•˜์…จ๋‹ค


๊ฐ•์‚ฌ๋‹˜ ์ถ”์ฒœ ๊ฐœ๋ฐœ ๊ณต๋ถ€ ๋ฐฉ๋ฒ•

  1. ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํƒ„ํƒ„ํ•˜๊ฒŒ, ์ƒ์‹์„ ๊ธฐ๋ฅด๊ธฐ
    => ๋ญ๋“  ๊ธฐ๋ณธ์ด ์ค‘์š”ํ•˜๋‹ค... ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ธ์–ด ๋ฐ CS์— ๋Œ€ํ•œ ์ƒ์‹(์ง€์‹)์šธ ๊ธธ๋Ÿฌ์•ผ ํ•œ๋‹ค

  2. ์ •๋‹ต์„ ์ฐพ๋Š” ๊ณผ์ •์„ ์ฆ๊ธฐ๊ธฐ(์—„์ฒญ ์ค‘์š”)
    => ์ •๋‹ต์„ ์‰ฝ๊ฒŒ ๋ฐ”๋กœ ์•Œ๋ ค๊ณ  ํ•˜์ง€ ๋ง๊ณ  ์Šค์Šค๋กœ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ •์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•˜์…จ๋‹ค. ๊ทธ๋ž˜์•ผ ๊ธฐ์–ต์—๋„ ์ž˜ ๋‚จ์„ ์ˆ˜ ์žˆ๋‹ค.

  3. ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ์ž˜ํ•˜๊ณ  ๋ชปํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ
    => ๋ฉ”ํƒ€์ธ์ง€ ๋งŽ์ด ๋“ค์–ด๋ณธ ๋‹จ์–ด์˜€๋‹ค. ์ž์‹ ์˜ ์ง€์‹์— ๋Œ€ํ•œ ์ธ์ง€ ์ƒํƒœ๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ๋ญ˜ ๋” ์ฐพ์•„๋ณผ ์ง€ ์•„๋Š” ๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์Šค์Šค๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  4. ๊ณต๋ถ€ํ•œ ๊ฒƒ์€ ๊ผญ ๊ธฐ๋กํ•˜๊ณ  ๊ฐ€๊ธ‰์ ์ด๋ฉด ๊ณต๊ฐœํ•˜๊ธฐ
    => ๋ฒจ๋กœ๊ทธ๋กœ ๋ธ”๋กœ๊ทธ๋ฅผ ์ดˆ์‹ฌ์ฐพ์•„ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ์ด์œ ๋‹ค. ๋ฆฌ์ฒ˜๋“œ ํŒŒ์ธ๋งŒ ๊ณต๋ถ€๋ฒ•์ฒ˜๋Ÿผ ์•„๋Š” ๊ฒƒ์„ ์ •๋ฆฌํ•˜์—ฌ ๊ธฐ๋กํ•˜๊ณ  ์ด๋ฅผ ์–ด๋ฆฐ์•„์ด์—๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•œ ๋‹จ์–ด๋กœ ์„ค๋ช…ํ•  ์ค„ ์•Œ์•„์•ผ ์ง„์ •์œผ๋กœ ์•ˆ ๊ฒƒ์ด๋‹ค.

  5. ์งˆ๋ฌธ์„ ๋‘๋ ค์›Œํ•˜์ง€ ์•Š๊ธฐ
    => ๋ฉ”ํƒ€์ธ์ง€์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™๋‹ค. ํ•˜๋ฃจ๋ฅผ ๋„˜๊ธฐ์ง€ ๋ง๊ณ  ์งˆ๋ฌธ๋ฌด์ƒˆ๊ฐ€ ๋˜์–ด์•ผ ๊ฒ ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…๋งŒ ํ•˜์…จ์ง€๋งŒ CS ์ง€์‹์ด๊ธฐ์— ์ถ”์ฒœํ•ด์ฃผ์‹  ๊ด€๋ จ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋‹ค์‹œ ์ •๋ฆฌํ•  ์˜ˆ์ •์ด๋‹ค.

https://d2.naver.com/helloworld/59361
https://ko.wikipedia.org/wiki/์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ_์—”์ง„
https://poiemaweb.com/js-browser


์ƒ์ˆ˜์™€ ๋ณ€์ˆ˜

JavaScript์˜ ์ƒ์ˆ˜์™€ ๋ณ€์ˆ˜

๊ธฐ๋ณธ์ ์ธ ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜ ์„ ์–ธ ๋ฐ ํ• ๋‹น ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค.


์ž๋ฃŒํ˜•

JavaScript์˜ ์ž๋ฃŒํ˜•

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ž๋ฃŒํ˜• 8๊ฐ€์ง€์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค.


๋ฉ”๋ชจ๋ฆฌ ์‹ฌํ™”

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ• ๋‹น => ์‚ฌ์šฉ => ํ•ด์ œ 3๊ฐ€์ง€ ๊ณผ์ •์„ ๊ฑฐ์นจ
ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์„ ๋„ฃ์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ
์ตœ์ข…์ ์œผ๋กœ ์‚ฌ์šฉ์„ ๋งˆ์นœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ œ๊ฑฐ ๊ฐ€๋Šฅ

๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ๊ฐ’์„ ๋ฐ”๋ผ๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋œ๋‹ค. (์ฐธ์กฐ)
์›์‹œ ํƒ€์ž…์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ ํ• ๋‹นํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
์ด๊ฒƒ์€ Heap๊ณผ Call stack์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
Heap์—๋Š” ์ฐธ์กฐ ํƒ€์ž…, Call stack์—๋Š” ์›์‹œ ํƒ€์ž…์„ ๊ฐ€์ง„๋‹ค.

๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•œ์ •๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ Garbage Collector๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•œ๋‹ค.

Garbage Collector๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

Mark and Sweep Algorithm

๋‹ฟ์„ ์ˆ˜ ์—†๋Š” ์ฃผ์†Œ๋Š” ๋”์ด์ƒ ํ•„์š”์—†๋Š” ์ฃผ์†Œ๋กœ ์ •์˜ (ํ™”์‚ดํ‘œ๊ฐ€ ๊ฐ€๋ฅดํ‚ค์ง€ ์•Š๋Š” ๊ฒƒ, ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ)
์ด๋ฅผ Garbage Collector๊ฐ€ ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ์ง€์šฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜


ํ‘œํ˜„์‹๊ณผ ์—ฐ์‚ฐ์ž

ํ‘œํ˜„์‹ (Expressions)

์–ด๋– ํ•œ ๊ฒฐ๊ณผ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜๋Š” ์‹
์›์‹œ ๊ฐ’์„ ํฌํ•จํ•˜์—ฌ ๋ณ€์ˆ˜, ์ƒ์ˆ˜, ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋“ฑ์œผ๋กœ ์กฐํ•ฉ ๊ฐ€๋Šฅ

const a = 11 + 45; // 56
const b = "String" + 4; // "String4"

์—ฐ์‚ฐ์ž์˜ ์ข…๋ฅ˜

  • ํ• ๋‹น ์—ฐ์‚ฐ์ž
    ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ํ‘œํ˜„์‹์„ ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž ๊ฐ’์— ํ• ๋‹น์‹œํ‚ด

  • ๋ณตํ•ฉ ํ• ๋‹น ์—ฐ์‚ฐ์ž
    =(๋“ฑํ˜ธ)์™€ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๋ฅผ ํ•จ๊ป˜ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ

  • ๋น„๊ต ์—ฐ์‚ฐ์ž
    ์ขŒ์ธก ์šฐ์ธก ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋น„๊ต, true or false ๋ฐ˜ํ™˜

  • ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž
    ์‚ฌ์น™์—ฐ์‚ฐ ์ˆ˜ํ–‰, Number ๋ฐ˜ํ™˜

  • ๋น„ํŠธ ์—ฐ์‚ฐ์ž
    ๋น„ํŠธ๋ฅผ ์ง์ ‘ ์กฐ์ž‘ (AND, OR, XOR, NOT, L Shift, R Shift)

  • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž
    Boolean์„ ํ†ตํ•ด true, false ๊ฒ€์ฆ

  • ์‚ผํ•ญ ์—ฐ์‚ฐ์ž
    '์กฐ๊ฑด ? ์ฐธ : ๊ฑฐ์ง“' ํ˜•ํƒœ๋กœ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฐ’์„ ์„ ํƒ

  • ๊ด€๊ณ„ ์—ฐ์‚ฐ์ž
    ๊ฐ์ฒด์— ์†์„ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์‚ฐ์ž

  • typeof
    ํ”ผ์—ฐ์‚ฐ์ž์˜ ํƒ€์ž…์„ ๋ฐ˜ํ™˜, String์œผ๋กœ ๋ฐ˜ํ™˜

์ฐธ์กฐ ์‚ฌ์ดํŠธ : https://poiemaweb.com/js-operator


ํ๋ฆ„ ์ œ์–ด

Control Flow

ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜
์กฐ๊ฑด๊ณผ ๋ฐ˜๋ณต์„ ํ†ตํ•˜์—ฌ ์ƒํƒœ๋ฅผ ์ œ์–ด

  • Control Flow : ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ
    Goto, If / Then / Else, Switch / Case, For / While

  • Data Flow : ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๋Šฅ
    Stateless, Recursion(์žฌ๊ท€), Pipe

์กฐ๊ฑด๋ฌธ

์กฐ๊ฑด์ด ๋งž์„ ๋•Œ๋งŒ ์‹คํ–‰๋˜๋Š” ๋ฌธ(Statements)

  • if
    ๊ด„ํ˜ธ ์•ˆ ์กฐ๊ฑด์‹์ด ์ฐธ์ธ ๊ฒฝ์šฐ ์‹คํ–‰๋˜๋Š” ๋ฌธ๋ฒ•
    else if, else๋„ ๊ฐ™์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    ์ฃผ์˜ํ•  ์  : false ๋ง๊ณ ๋„ ๊ฑฐ์ง“์ด ๋˜๋Š” ๊ฒƒ์ด ์กด์žฌ
    false, undefined, null, 0 , NaN, ''(๋นˆ ๋ฌธ์ž์—ด)

  • switch
    ๊ด„ํ˜ธ ์•ˆ ๊ฐ’์— ๋”ฐ๋ผ ๋ถ„๊ธฐ
    case, default์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
    ์ฃผ์˜ํ•  ์  : case๊ฐ€ ๋๋‚˜๋Š” ๊ณณ์— break๋ฅผ ๋ฐ˜๋“œ์‹œ ์ ์šฉํ•ด์•ผํ•จ (์ผ€์ด์Šค ๋ถ„๊ธฐ)


๋ฐ˜๋ณต๋ฌธ

๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ง€์‹œ

  • for
    ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ๋ฐ˜๋ณต๋ฌธ
    ์ดˆ๊ธฐ๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ฆ๊ฐ๋ฌธ์œผ๋กœ ๊ตฌ์„ฑ
    ์กฐ๊ฑด๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๊ฑฐ์ง“์ด ๋˜๋ฉด ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ
// for (์ดˆ๊ธฐ๋ฌธ; ์กฐ๊ฑด๋ฌธ; ์ฆ๊ฐ๋ฌธ)
for (let i=0; i<10; i+=1) {
	console.log(i);
}
  • while
    ๊ด„ํ˜ธ ์•ˆ ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
let x = 0;
while (x<5) {
  x += 1;
  console.log(x);
}

// 0 1 2 3 4
  • do-while
    while๋ฌธ์—์„œ ํŒŒ์ƒ
    while๊ณผ ๋‹ฌ๋ฆฌ ๋จผ์ € ์ง„์ž… ํ›„ ๋กœ์ง ์šฐ์„  ์‹คํ–‰
    ์‹คํ–‰ ๋‹ค์Œ์œผ๋กœ ์กฐ๊ฑด ๊ฒ€์‚ฌ
let x = 0;

do {
  console.log("Hi");
} while (x > 3);

// Hi

๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด

์—ฌ๋Ÿฌ ์ž๋ฃŒํ˜•์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ ๋ฐฐ์› ๋‹ค.

JavaScript์˜ ๋ฐฐ์—ด

JavaScript์˜ ๊ฐ์ฒด


์Šค์ฝ”ํ”„์™€ ํด๋กœ์ €

์Šค์ฝ”ํ”„

์œ ํšจ ๋ฒ”์œ„, ๋ณ€์ˆ˜๊ฐ€ ์–ด๋А ๋ฒ”์œ„๊นŒ์ง€ ์ฐธ์กฐ๋˜๋Š”์ง€ ์˜๋ฏธ

  • ์ „์—ญ(Global) ์Šค์ฝ”ํ”„ : ์–ด๋””์„œ๋‚˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์ง€์—ญ(Local) ์Šค์ฝ”ํ”„ : ํ•ด๋‹น ์ปจํ…์ŠคํŠธ์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

var๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๊ฐ€ ์ ์šฉ๋˜๋ฏ€๋กœ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒํ•จ
๋ณ€์ˆ˜ ์„ ์–ธ์ด ์ƒ๋‹จ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋ฒ„๋ฆผ

const์™€ let์€ ๋ธ”๋ก ์Šค์ฝ”ํ”„๊ฐ€ ์ ์šฉ๋˜๋ฏ€๋กœ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜ ์„ ์–ธ ์‹œ์—๋Š” ํ•ด๋‹น ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

var a = 1;

{
  var a = 5; // ํ˜ธ์ด์ŠคํŒ… ๋ฐœ์ƒ๋˜์–ด ๋ณ€์ˆ˜ ์„ ์–ธ์ด ์ตœ์ƒ๋‹จ์œผ๋กœ ๊ฐ
  console.log(a);
}

console.log(a);

ํด๋กœ์ €

ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ํ™˜๊ฒฝ์˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ธฐ์–ต
ํ•จ์ˆ˜๊ฐ€ ์Šค์ฝ”ํ”„ ๋ฐ–์—์„œ ์‹คํ–‰๋  ๋•Œ์—๋„ ๊ธฐ์–ตํ•œ ์Šค์ฝ”ํ”„์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ฌธ๋ฒ•

  • ์€๋‹‰ํ™”

ํด๋กœ์ €๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Œ

ํด๋กœ์ €๋ฅผ ์ž˜ ์•Œ์•„์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹จ ์•Œ๊ธฐ ํž˜๋“  ๋ฒ„๊ทธ๋ฅผ ์ž˜ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž„
<์ด์„ ํ˜‘ ๋ฉ˜ํ† ๋‹˜>

์Šค์ฝ”ํ”„๋ฅผ ์ž˜๋ชป ์ง€์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

function counting() {
  let i = 0;
  for (i = 0; i < 5; i += 1) {
    setTimeout(function () {
      console.log(i);
    }, i * 100);
  }
}

counting(); // 5 5 5 5 5

0~4๊นŒ์ง€๊ฐ€ ์•„๋‹Œ 5๊ฐ€ 5๋ฒˆ ์ถœ๋ ฅ๋จ
์™œ ๊ทธ๋Ÿด๊นŒ?

์ •๋‹ต์€ setTimeout ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด์„œ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ์‹œ์ ์—๋Š”
i๊ฐ€ ์ด๋ฏธ for๋ฌธ์— ์˜ํ•ด 5๊ฐ€ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ

๋”ฐ๋ผ์„œ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์—๋Š” 2๊ฐ€์ง€๊ฐ€ ์žˆ์Œ

  1. ์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜(IIFE) ์‚ฌ์šฉ
    ๋งค ๋ฃจํ”„๋งˆ๋‹ค ํด๋กœ์ €๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ
function counting() {
  let i = 0;
  for (i = 0; i < 5; i += 1) {
    (function (number) {
      setTimeout(function () {
        console.log(number);
      }, number * 100);
    })(i);
  }
}

counting(); // 0 1 2 3 4
  1. let ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ
    let์€ ๋ธ”๋ก ์Šค์ฝ”ํ”„์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งค ๋ฃจํ”„๋งˆ๋‹ค ํด๋กœ์ €๊ฐ€ ์ƒ์„ฑ๋จ
function counting() {
  let i = 0;
  for (let i = 0; i < 5; i += 1) { // for ๋ฌธ ๋ฃจํ”„์— let ์ ์šฉ
    setTimeout(function () {
      console.log(i);
    }, i * 100);
  }
}

counting(); // 0 1 2 3 4

๐Ÿ˜… ํ•ด๋‹น ๋‚ด์šฉ์€ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด๋‚˜ ์˜คํ•ดํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ ˆํผ๋Ÿฐ์Šค

[MDN ๊ณต์‹๋ฌธ์„œ]
https://developer.mozilla.org/ko/docs/Web/JavaScript
[poiemaweb]
https://poiemaweb.com/
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค ์ด์„ ํ˜‘ ๊ฐ•์‚ฌ๋‹˜ ๊ฐ•์˜]

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ค€๋น„์ค‘...

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