๋ค์ด๊ฐ๋ฉฐ ๐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ดํดํ๋ ๋ฐ ์์ด์ ์คํ ์ปจํ ์คํธ(Execution Context)์ ๊ฐ๋ ์ ๋ํด์ ์์งํ๋ ๊ฒ์ ์ค์ํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋๋ก, ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ๋์ ์คํ ์์์ ๋ฐฉ์์ ๊ฒฐ์ ํ๊ฒ ๋์ฃ . ์คํ ์ปจํ ์คํธ(Excution Context)๋โ ์คํํ ์ฝ๋์ ์ ๊ณตํ ํ๊ฒฝ ์ ๋ณด๋ค์ ๋ชจ์๋์ ๊ฐ์ฒด์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ์ธ์ด๋ก์์ ์ฑ๊ฒฉ์ ๊ฐ์ฅ ์ ํ์ ํ ์ ์๋ ๊ฐ๋ ์ ๋๋ค. ๊ทธ๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์คํ ์ปจํ ์คํธ๊ฐ ํ์ฑํ๋๋ ์์ ์ ์๋์ ๊ฐ์ ๋์์ ์ํํฉ๋๋ค. ํธ์ด์คํ (hoisting) ์ธ๋ถ ํ๊ฒฝ ์ ๋ณด ๊ตฌ์ฑ this ๊ฐ ์ค์ ๋ฑ๋ฑ ์ด๋ก ์ธํด ๋ค๋ฅธ ์ธ์ด์์๋ ๋ฐ๊ฒฌํ ์ ์๋ ํน์ดํ ํ์๋ค์ด ๋ฐ์ํฉ๋๋ค. ๋์ ๊ณผ์ ๋์ผํ ํ๊ฒฝ์ ์๋ ์ฝ๋๋ค์ ์คํํ ๋ ํ์ํ ํ๊ฒฝ ์ ๋ณด..
๐ ๋ค์ด๊ฐ๋ฉฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ ํจํด์ ์์๋ณด๊ธฐ ์์, ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ ๋ฌด์์ผ๊น์? ๋น๋๊ธฐ ์ฒ๋ฆฌ๋? ํน์ ์ฝ๋์ ์ฐ์ฐ์ด ์๋ฃ๋ ๋๊น์ง ์ ์ฒด ์ฝ๋์ ์คํ์ ์ค๋จํ์ง ์๊ณ , ๋ค์ ์ฝ๋๋ฅผ ์ฐ์ ์ ์ผ๋ก ์คํํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์ด๋ ๊ฒ ๋์ํ๋ ํจ์๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ '๋น๋๊ธฐ ํจ์'๋ผ๊ณ ํฉ๋๋ค. ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ํ๊ณ์ ์ ์์ ์๋ฃ ์์ ์ ์์ธกํ๊ธฐ ์ด๋ ต๋ค๋ ์ ์ ๋๋ค. ํ์ง๋ง ์ด๊ฒ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋ณธ์ง์ ์ธ ํน์ฑ์ด๋ฉฐ, ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ค๋ ๋(single-threaded) ๊ธฐ๋ฐ์ ์ธ์ด๋ก, ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฝ๋๊ฐ ์์ฑ๋ ์์๋๋ก, ์์์ ์๋๋ก, ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋น๋๊ธฐ์ ์ธ ..
this ํค์๋์ ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ this๋ ํ์ฌ ์คํ ์ปจํ ์คํธ๋ฅผ ์ฐธ์กฐํ๋ ํน๋ณํ ํค์๋์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ ์ปจํ ์คํธ๊ฐ ์์ฑ๋ ๋ ํจ๊ป ๊ฒฐ์ ์ด ๋๋๋ฐ์. ์ฆ, this์ ๊ฐ์ ํจ์๊ฐ ์ด๋ป๊ฒ ํธ์ถ๋์๋์ง์ ๋ฐ๋ผ ๋ณํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก๋ ํจ์๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํฉ๋๋ค. ์ผ๋ฐ ํจ์์์์ this ์ผ๋ฐํจ์์์ this๋ '์ ์ญ ๊ฐ์ฒด'๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. ์ ์ญ ๊ฐ์ฒด๋? ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ window, Node.js ํ๊ฒฝ์์๋ global ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค. function main() { console.log(this); } main(); // window ๊ฐ์ฒด ๋๋ global ๊ฐ์ฒด ์ถ๋ ฅ ์์ ๊ฐ์ด ์ด๋ ๊ฒ ์ ์ญ์ ์ผ๋ก ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ function main() { console.log(this); } ..
๐ ๋ค์ด๊ฐ๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋์ธ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง๊ณผ ์บก์ณ๋ง์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ๋ฒ๋ธ๋ง(Bubbling) ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ด๋ ๋ฌด์์ผ๊น์? ํ ์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด, ํด๋น ์์์ ํ ๋น๋ ํธ๋ค๋ฌ๊ฐ ๋์ํ๊ณ , ์ด์ด์ ๋ถ๋ชจ ์์์ ํธ๋ค๋ฌ๊ฐ ๋์ํฉ๋๋ค. ๊ฐ์ฅ ์ต์๋จ์ ์กฐ์ ์์๋ฅผ ๋ง๋ ๋๊น์ง ํด๋น ๊ณผ์ ์ด ๋ฐ๋ณต์ด ๋ฉ๋๋ค. ๊ฐ๋จํ ์๋ ์ฝ๋ ์์ ๋ฅผ ๋ณด๋ฉด ๋ฐ๋ก ์ดํด๊ฐ ๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฅ ์์ชฝ์ ์๋ pํ๊ทธ๋ฅผ ํด๋ฆญํ๋๋ฐ 3๊ฐ์ ํธ๋ค๋ฌ๊ฐ ๋์ํ๋ ๊ฒ ๋ณด์ด์๋์? p์ ํ ๋น๋ onclick ํธ๋ค๋ฌ ์คํ ๋ฐ๊นฅ์ div์ ํ ๋น๋ ํธ๋ค๋ฌ ์คํ ๊ทธ ๋ฐ๊นฅ์ form์ ํ ๋น๋ ํธ๋ค๋ฌ ์คํ documnet ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋๊น์ง, ๊ฐ ์์์ ํ ๋น๋ onclick ํธ๋ค๋ฌ๊ฐ ๋์ํฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก div๋ฅผ ํด๋ฆญํ๋ฉด div -..
๐ ๋ค์ด๊ฐ๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฝ๋์ ์คํ ์์์ ์ค์ฝํ๋ฅผ ์ดํดํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ ์ค์ํ ๊ฐ๋ ์ค ํ๋์ธ ํธ์ด์คํ (hoisting)์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ํธ์ด์คํ (hoisting)์ด๋ โ ํธ์ด์คํ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ๊ณ ์คํํ๋ ๊ณผ์ ์์, ๋ณ์๋ ํจ์, ํด๋์ค ์ ์ธ์ ์ฝ๋์ ๋งจ ์๋ก '๋์ด์ฌ๋ฆฌ๋' ๊ฒ๊ณผ ๊ฐ์ ํ์์ ๋งํฉ๋๋ค. ๋ณดํต ํธ์ด์คํ ์ ๋ํ ์ค๋ช ์ ๋ณด๋ฉด '๋์ด์ฌ๋ ค์ง๋ค'๋ผ๊ณ ๋๋ถ๋ถ ์ค๋ช ์ด ๋์ด ์๋๋ฐ ํธ์ด์คํ ์ด ์ค์ ๋ก ์ฝ๋๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ต์๋จ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ์๋๋๋ค. ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ด๋ถ ๋์ ๋ฐฉ์์ ์ค๋ช ํ๋ ๊ฐ๋ ์ผ ๋ฟ์ ๋๋ค. ํธ์ด์คํ ์ ์คํ ์ปจํ ์คํธ์ ์์ฑ ๋จ๊ณ์์ ์ผ์ด๋ฉ๋๋ค. ์คํ ์ปจํ ์คํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์คํ๋๋ ํ๊ฒฝ์ ๋งํฉ๋๋ค. ์์ฑ ๋จ๊ณ์์๋ ๋ณ์..
๐ ๋ค์ด๊ฐ๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)๋ ๋ฌด์์ด๊ณ , ์ ์ค์ํ ๊ฐ๋ ์ผ๊น์? ์ฑ๊ธ ์ค๋ ๋(Single Thread)๋? ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ๊ธฐ๋ฐ์ ์ธ์ด์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฑ๊ธ ์ค๋ ๋๋ ๋ฌด์์ผ๊น์? ์ฑ๊ธ ์ค๋ ๋๋ฅผ ์ดํดํ๊ธฐ ์ ์ ์ค๋ ๋๋ผ๋ ๊ฐ๋ ์ ๋จผ์ ์์์ผ ํฉ๋๋ค. ์ค๋ ๋๋ ํ๋ก์ธ์ค์ ์คํ ๋จ์์ ๋๋ค. ์ฆ, ์ผ์ ์ฒ๋ฆฌํ๋ ์์ ์์๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ฑ๊ธ ์ค๋ ๋๋ผ๋ ๊ฒ์ ๋ง ๊ทธ๋๋ก ์ค๋ ๋๊ฐ ํ๋๋ง ์กด์ฌ, ์ผ์ ์ฒ๋ฆฌํ๋ ์์ ์์์ด ํ ๋ช ๋ฐ์ ์๋ ์๊ธฐ์ ๋๋ค. ๋ธ๋กํน(Blocking)๊ณผ ๋ ผ๋ธ๋กํน(Non-blocking) ์ฐ๋ฆฌ์ ์์ ์์์ ํ ๋ช ์ด๋ผ์ ๋ชจ๋ ์ผ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์ปดํจํฐ์๊ฒ ๋งก๊ธด ์ผ ์ค ํ๋๊ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ฉด ์ด๋ป..
๐ก slice() ๋ฐฐ์ด ๋ฉ์๋ slice() ๋ฉ์๋๋ ๋ฐฐ์ด์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค๊ฑฐ๋ ๋ฐฐ์ด์ ์ผ๋ถ๋ฅผ ๋ฐํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค. slice() ๋ฉ์๋๋ ์๋ ๋ฐฐ์ด์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋์ ์์ ๋ณต์ฌ๋ณธ์ ์์ฑํ๋ค๋ ์ ์ ์ ์ํด์ผ ํ๋ค. ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ๋ค. slice(optional start parameter, optional end parameter) ์ด ์์์์๋ ๊ณผ์ผ ๋ชฉ๋ก์ ๋ง๋ค์๋ค. const fruits = ['apple', 'banana', 'mango', 'melon']; slice() ๋ฉ์๋๋ฅผ ๋งค๊ฐ๋ณ์ ์์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ โ slice() ๋ฉ์๋๋ฅผ ํ์ฉํด ํด๋น ๋ฐฐ์ด์ ์์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค ์ ์๋ค. console.log(fruits.slice()); // ['apple', 'banana', 'm..
๐ ๋ค์ด๊ฐ๋ฉฐ์ด๋ ๊ฒ ์๋ฐ์คํฌ๋ฆฝํธ์ for๋ฌธ์ ์ข ๋ฅ์ ๋ํ ๊ธ์ ์ ๋ฆฌํ๋ ์ด์ ๋ ํ์ฌ ๋์ค์ ์ทจ์ ์ ์ํ ์ฝ๋ฉ ํ ์คํธ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ค๋นํ๋ฉด์ for๋ฌธ์ ์์ฑํ ๋๊ฐ ๋ง์๋ฐ, ๊ณต๋ถ๋ฅผ ํ๋ฉด์ for๋ฌธ์ ์ข ๋ฅ๊ฐ ๋ค์ํ๊ฒ ์๋ ๊ฑด ์์์ง๋ง ์ค์ ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ณต๋ถํ๋ฉด์ ์ ๊ฐ ์์ฃผ ์ฌ์ฉํ for๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ for๋ฌธ๊ณผ forEach๋ฌธ๋ง ์์ฃผ ์ฌ์ฉํ์๊ณ , ๊ทธ ์ธ์๋ ๊ฑฐ์ ํ ๋ฒ๋ ์ฌ์ฉํด ๋ณธ ์ ์ด ์์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ๋ค์ํ for๋ฌธ๊ณผ ์ ์ด ํด๋ณด๋ฉด์ ๊ฐ๊ฐ์ ์ํฉ์ ๋ฐ๋ผ ๊ฐ for๋ฌธ๋ง๋ค ์ฅ์ ์ด ์๊ณ , ์ฑ๋ฅ์ ์ฐจ์ด๋ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฒ ๊ธฐํ์ ํ์คํ๊ฒ ์๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ๊ฐ๋จํ๊ฒ ์ด๋ค ์ญํ ์ ํ๋ ์ ๋์ธ์ง์ ๋ํด์ ์ ๋ฆฌํ๋ค.๐ก ์์๋ณผ ๊ฒ๋ค(์ ํ์ ์ธ) forfor infor offo..
๐ ๋ค์ด๊ฐ๋ฉฐ ์๋ ํ์ธ์. ์ค๋์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฒํผ ํด๋ฆญ์ผ๋ก ์ค๋์ค๋ฅผ ์ ์ดํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค. ๋ฒํผ ํด๋ฆญ์ผ๋ก ์์ ์ ์ผ๊ณ ๋๊ณ , ๋ค์ ์์ ์ผ๋ก ๋๊ธฐ๋ ์ฌ๋ฌ ์์ ์ ์ ์ดํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ HTML์๋ audioํ๊ทธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , ์ค์ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ง audio ์ ์ด๋ฅผ ํ๋ค๊ฐ ๋งํ์ง๋ง, ๊ฒฐ๊ตญ ์ ํด๊ฒฐ์ ํด์ ๋ฐ๋ก ์ ๋ฆฌํ๊ฒ ๋ฉ๋๋ค. ์์ฃผ ๊ฐ๋จํ ์๋ฅผ ๋ค์ด์, const audio = new Audio('audio_file.mp3'); audio.play(); HTML์ ๋ฐ๋ก ์ค๋์ค ํ๊ทธ๋ฅผ ์์ฑํ์ง ์๊ณ ์ด๋ฐ ์์ผ๋ก audio ์ฝ๋ฉ์ ํด์ ๋ก์ปฌ์์ ์ ์๋ํ๋ ๊ฒ์ ํ์ธํ๊ณ , ๊นํ๋ธ ํผ๋ธ๋ฆฌ์ฑ์ ํ์ฌ ์ฌ์ดํธ๋ก ๋ฐฐํฌํ๋๊น ์๋์ ๊ฐ์ ์ค๋ฅ๋ก ์ค๋์ค ์ฌ์์ด ์๋ํ์ง ์๋ ๊ฒ์ ํ์ธํ์ต๋๋ค..