Skip to content

inside_javascript_3

kyusung edited this page Apr 13, 2017 · 1 revision

์ธ์‚ฌ์ด๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

์‹คํ–‰ ์ปจํ…์ŠคํŠธ

์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ์ •์˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ํ˜•์ƒํ™”ํ•˜๊ณ  ๊ตฌ๋ถ„ํ•˜๋Š” ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์ด๋‹ค. ํ’€์–ด์„œ ๋งํ•˜๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ๋ธ”๋ก์ด ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹คํ–‰ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์ „์—ญ ์ฝ”๋“œ, eval() ํ•จ์ˆ˜๋กœ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ, ํ•จ์ˆ˜ ์•ˆ์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ECMAScript์—์„œ๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ์ƒ์„ฑ์„ ํ˜„์žฌ ์‹คํ–‰๋˜๋Š” ์ปจํ…์ŠคํŠธ์—์„œ ์ด ์ปจํ…์ŠคํŠธ์™€ ๊ด€๋ จ ์—†๋Š” ์‹คํ–‰ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ์ƒˆ๋กœ์šด ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์Šคํƒ์— ๋“ค์–ด๊ฐ€๊ณ  ์ œ์–ด๊ถŒ์ด ๊ทธ ์ปจํ…์ŠคํŠธ๋กœ ์ด๋™ํ•œ๋‹ค๋ผ๊ณ  ์„ค๋ช…ํ•œ๋‹ค.

  • ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ƒ์„ฑ ๊ณผ์ •

    1. ํ™œ์„ฑ ๊ฐ์ฒด ์ƒ์„ฑ : ์—”์ง„์—์„œ ์ปจํ…์ŠคํŠธ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ (= ํ™œ์„ฑ ๊ฐ์ฒด or ๋ณ€์ˆ˜ ๊ฐ์ฒด)
    2. arguments ๊ฐ์ฒด ์ƒ์„ฑ
    3. ์Šค์ฝ”ํ”„ ์ •๋ณด ์ƒ์„ฑ : ํ•ด๋‹น ์ปจํ…์ŠคํŠธ ์œ ํšจ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •๋ณด๋ฅผ ์ƒ์„ฑ (์Šค์ฝ”ํ”„ ์ฒด์ธ ์ƒ์„ฑ [[scope]])
    4. ๋ณ€์ˆ˜ ์ƒ์„ฑ : ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์˜ ์ƒ์„ฑ (ํ•จ์ˆ˜๋„ ํฌํ•จ)
    5. this ๋ฐ”์ธ๋”ฉ : this ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’์ด ํ• ๋‹น ๋จ, this๊ฐ€ ์ฐธ์กฐ ๊ฐ์ฒด๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์ „์—ญ ๊ฐ์ฒด ์ฐธ์กฐ
    6. ์ฝ”๋“œ ์‹คํ–‰ : ์ด ๊ณผ์ •์—์„œ ๊ฐ’์ด ํ• ๋‹น ๋จ.

    ์ „์—ญ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” arguments ๊ฐ์ฒด๊ฐ€ ์—†์œผ๋ฉฐ ์ „์—ญ ๊ฐ์ฒด ํ•˜๋‚˜๋งŒ์„ ํฌํ•จํ•˜๋Š” ์Šค์ฝ”ํ”„ ์ฒด์ธ์ด ์žˆ๋‹ค.

  • ์Šค์ฝ”ํ”„ ์ฒด์ธ
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ตฌ๋ฌธ(ex. for(), {}, if{}) ์œ ํšจ ๋ฒ”์œ„๊ฐ€ ์—†๋‹ค. ์˜ค์ง ํ•จ์ˆ˜๋งŒ์ด ์œ ํšจ๋ฒ”์œ„์˜ ํ•œ ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค. ์ด ์œ ํšจ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์Šค์ฝ”ํ”„๊ฐ€ [[scope]] ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ ํ•จ์ˆ˜ ๊ฐ์ฒด ๋‚ด์—์„œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ํ˜•์‹์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š”๋ฐ, ์ด๋ฅผ _์Šค์ฝ”ํ”„ ์ฒด์ธ_์ด๋ผ๊ณ  ํ•œ๋‹ค.

    3 ....
    2 ๋ณ€์ˆ˜ ๊ฐ์ฒด 2
    1 ๋ณ€์ˆ˜ ๊ฐ์ฒด 1
    0 ๋ณ€์ˆ˜ ๊ฐ์ฒด 0
    • ๊ฐ ํ•จ์ˆ˜ ๊ฐ์ฒด๋Š” [[scope]] ํ”„๋กœํผํ‹ฐ๋กœ ํ˜„์žฌ ์ปจํ…์ŠคํŠธ์˜ ์Šค์ฝ”ํ”„ ์ฒด์ธ์„ ์ฐธ์กฐํ•œ๋‹ค.
    • ํ•จ์ˆ˜ ์‹คํ–‰์‹œ ์ƒˆ๋กœ์šด ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ํ˜„์žฌ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ [[scope]] ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ ,
      ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๋ณ€์ˆ˜ ๊ฐ์ฒด๋ฅผ ํ•ด๋‹น ์ฒด์ธ์˜ ์ œ์ผ ์•ž(=์œ„)์— ์ถ”๊ฐ€ํ•œ๋‹ค.
    • ์Šค์ฝ”ํ”„ ์ฒด์ธ = ํ˜„์žฌ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ๋ณ€์ˆ˜ ๊ฐ์ฒด + ์ƒ์œ„ ์ปจํ…์ŠคํŠธ์˜ ์Šค์ฝ”ํ”„ ์ฒด์ธ

    ์Šค์ฝ”ํ”„ ์ฒด์ธ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ฐพ๋Š” ํ–‰์œ„๋ฅผ ์‹๋ณ„์ž ์ธ์‹(Identifier resolution)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์‹๋ณ„์ž ์ธ์‹์€ ์ฒด์ธ์˜ ์ฒซ๋ฒˆ์งธ ๋ณ€์ˆ˜ ๊ฐ์ฒด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋Œ€์‘๋˜๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ™•์ธํ•œ๋‹ค.
    ES5,6์—์„œ๋Š” outer๋ฅผ ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ์‹๋ณ„์ž๋ฅผ ์ฐพ๋Š”๋‹ค. (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์˜ ์‹คํ–‰)

Clone this wiki locally