๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ13

HTML์ด ๋ Œ๋”๋ง ์ค‘์— JavaScript๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ Œ๋”๋ง์ด ๋ฉˆ์ถ”๋Š” ์ด์œ  ๋จผ์ €!! ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง๊ณผ์ • ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML๊ณผ CSS ์ž์›์„ ๋ฐ›์•„์™€์„œ DOM Tree์™€ SSOM Tree๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. DOM Tree์™€ SSOM Tree๋กœ ๋ธŒ๋ผ์šฐ์ €์— ๋ ˆ์ด์•„์›ƒ์„ ์žก์•„์ค„ ๋ Œ๋”ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋ Œ๋”ํŠธ๋ฆฌ ๋…ธ๋“œ ์žˆ๋Š” ์†์„ฑ์ด๋‚˜ ์Šคํƒ€์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ํฌ๊ธฐ, ์œ„์น˜, ํฌ๊ธฐ์— ๋งž๊ฒŒ ๋ ˆ์ด์•„์›ƒ์„ ์žก๋Š”๋‹ค. ๋ธŒ๋ผ์šฐ์ €์— ํŽ˜์ธํŠธ ํ•œ๋‹ค. ์ด์œ  #1 ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ • ์ค‘์— ํƒœ๊ทธ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ์ง„ํ–‰์ค‘์ธ HTMLํŒŒ์‹ฑ์„ ์ค‘์ง€ํ•˜๊ณ  js์—”์ง„์œผ๋กœ ์ œ์–ด ๊ถŒํ•œ์„ ๋„˜๊ธด๋‹ค. JSํŒŒ์‹ฑ๊ณผ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ Œ๋”๋ง ์—”์ง„์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐ€ ํŒŒ์‹ฑ์ด ์ค‘๋‹จ๋œ ์‹œ์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ํŒŒ์‹ฑ์„ ์‹œ์ž‘ํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์‚ฌ์šฉ์ž๋Š” ์†๋„๊ฐ€ ๋Š๋ ค์ง„ ๊ฒƒ ์ฒ˜๋Ÿผ ๋Š๊ปด์ง€๊ณ  ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. ์ด๋Ÿฌํ•œ ์›๋ฆฌ ๋•Œ๋ฌธ์— ์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค๋Š” body ํƒœ๊ทธ ๋์— ๋‘๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. ์ž.. 2023. 1. 9.
[JS]์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง๊ณผ ์บก์ฒ˜๋ง(Bubbling & Capturing) ๐Ÿ‘‰๐ŸปJavaScript์—๋Š” click , keypress , focus , submit , scroll , change ์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ๋“ค์ด ์žˆ๋‹ค. ๋งŒ์•ฝ ๋ถ€๋ชจ ์š”์†Œ์™€ ์ž์‹ ์š”์†Œ์— ๋‘˜ ๋‹ค ๊ฐ™์€ ์ข…๋ฅ˜์˜ ์ด๋ฒคํŠธ๊ฐ€ ํ• ๋‹น ๋˜์–ด์žˆ์„ ๋•Œ, ์ด๋ฒคํŠธ๋ฅผ ๋™์ž‘์‹œํ‚ค๋ฉด ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋ ๊นŒ? ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง ( Event Bubbling ) ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์€ ํŠน์ • ํ™”๋ฉด ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋” ์ƒ์œ„์˜ ํ™”๋ฉด ์š”์†Œ๋“ค๋กœ ์ „๋‹ฌ๋˜์–ด ๊ฐ€๋Š” ํŠน์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค. ์œ„์™€ ๊ฐ™์ด ๋ธŒ๋ผ์šฐ์ €๋Š” ํŠน์ • ํ™”๋ฉด ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๊ทธ ์ด๋ฒคํŠธ๋ฅผ ์ตœ์ƒ์œ„์— ์žˆ๋Š” ํ™”๋ฉด ์š”์†Œ๊นŒ์ง€ ์ด๋ฒคํŠธ๋ฅผ ์ „ํŒŒ์‹œํ‚ค๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ํ•˜์œ„์—์„œ ์ƒ์œ„ ์š”์†Œ๋กœ์˜ ์ด๋ฒคํŠธ ์ „ํŒŒ ๋ฐฉ์‹์„ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง(Event Bubbling)์ด๋ผ๊ณ  ํ•œ๋‹ค... 2022. 11. 27.
[JavaScript] ์Šค์ฝ”ํ”„ ์ฒด์ธ์ด๋ž€? ์Šค์ฝ”ํ”„๋ž€? ๋ณ€์ˆ˜(์‹๋ณ„์ž)์˜ ์œ ํšจ ๋ฒ”์œ„๋ฅผ ๋œปํ•œ๋‹ค. ์Šค์ฝ”ํ”„(Scope)๋Š” ๋ณ€์ˆ˜๊ฐ€ ์–ด๋””์„œ, ์–ด๋–ป๊ฒŒ ์„ ์–ธ๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๊ทธ ๋ณ€์ˆ˜์˜ ์œ ํšจํ•œ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๊ทœ์น™์ด๊ธฐ๋„ ํ•˜๋ฉฐ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ด ๊ทœ์น™์— ๋”ฐ๋ผ ์ฐธ์กฐ์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๋ณ€์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•ด๋‚˜๊ฐ„๋‹ค. (→ ๊ทธ๊ฒƒ์„ Scope Chain) ๐Ÿ”—์Šค์ฝ”ํ”„์ฒด์ธ? ์ž๋ฐ”์Šค ํฌ๋ฆฝํŠธ ES2015๊ธฐ์ค€์œผ๋กœ ํ™•๋ฐ”๋€œ ์˜ˆ์ „์—” ํ•จ์ˆ˜๊ฐ€ ๊ธฐ์ค€์ด์˜€๋Š”๋ฐ ์š”์ฆ˜์—” ๋ธ”๋ก์ด ๊ธฐ์ค€์ด๋‹ค( ํ•จ์ˆ˜๋„ ๋‹คํ–‰ํžˆ ๋ธ”๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค ) ์Šค์ฝ”ํ”„ ์ฒด์ธ(Scope Chain)์€ ์ผ์ข…์˜ ๋ฆฌ์ŠคํŠธ๋กœ์„œ ์ „์—ญ ๊ฐ์ฒด์™€ ์ค‘์ฒฉ๋œ ํ•จ์ˆ˜์˜ ์Šค์ฝ”ํ”„์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐจ๋ก€๋กœ ์ €์žฅํ•˜๊ณ , ์˜๋ฏธ ๊ทธ๋Œ€๋กœ ๊ฐ๊ฐ์˜ ์Šค์ฝ”ํ”„๊ฐ€ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ(chain)๋˜๊ณ  ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ ์„ ๋งํ•œ๋‹ค. ์œ ํšจ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์Šค์ฝ”ํ”„๊ฐ€ scope ํ”„๋กœํผํ‹ฐ๋กœ ๊ฐ ํ•จ์ˆ˜ ๊ฐ์ฒด ๋‚ด์—์„œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ.. 2022. 11. 9.
[JavaScript] Scope๋ž€? ๐Ÿ‘‍๐Ÿ—จ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„(function-level scope)๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ํ•จ์ˆ˜ ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ž€ ํ•จ์ˆ˜ ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด์—์„œ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด์—์„œ๋งŒ ์œ ํšจํ•˜๊ณ  ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š๋‹ค(์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค)๋Š” ๊ฒƒ์ด๋‹ค. ๐Ÿ‘‰๐Ÿป๋‹จ, ECMAScript 6์—์„œ ๋„์ž…๋œ let keyword๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ธ”๋ก ๋ ˆ๋ฒจ ์Šค์ฝ”ํ”„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป Scope๋ž€? Scope๋Š” ์ง์—ญํ•˜๋ฉด "๋ฒ”์œ„"๋ผ๋Š” ๋œป์ด๋‹ค. JavaScript ์—์„œ Scope(์Šค์ฝ”ํ”„)๋Š” ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ๋งํ•œ๋‹ค. ์‹๋ณ„์ž(๋ณ€์ˆ˜)๋ฅผ ์ฐพ๊ธฐ์œ„ํ•œ ๊ทœ์น™์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์‹๋ณ„์ž์˜ ์œ ํšจ ๋ฒ”์œ„ ⇒ ๋ชจ๋“  ์‹๋ณ„์ž๋Š” ์ž์‹ ์ด ์„ ์–ธ๋œ ์œ„์น˜์— ์˜ํ•˜์—ฌ ๋‹ค๋ฅธ ์ฝ”๋“œ๊ฐ€ ์‹๋ณ„์ž ์ž์‹ ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋จ. var x = 'global'; f.. 2022. 11. 5.