throttle๊ณผ debounce ์ค๋กํ(Throttle)๊ณผ ๋๋ฐ์ด์ค(Debounce)๋ ๋ฌด์์ผ๊น?๋ผ๋ ๊ถ๊ธ์ฆ์ด ์๊ฒจ๋ ๊ฒ์ด๋ค. ๋ ๋ํ ์ด๊ฒ ๋ญ์งํ๋ค. ์ฐ์ ์ด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ชจ๋ DOM์ด๋ฒคํธ ๊ธฐ๋ฐ์ผ๋ก ์คํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฑ๋ฅ์์ ์ด์ ๋ก ์ ์ดํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์
?. ์ฐ์ฐ์ํจ์ ํธ์ถ์์ ์ฌ์ฉ๋ ๋, ๋ง์ฝ ์ฃผ์ด์ง ํจ์๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, undefined๋ฅผ ๋ฆฌํดํจ => ์๋ฌ ๋ฐ์ํ๋ ๊ฒ ๋์ ์!!!&& ์ฐ์ฐ์๋ฅผ ๋์ ํ์ฌ ์ฌ์ฉํ ์ ์์ด์ ์ฝ๋๊ฐ ๋ ๊ฐํธํด์ง!!!!!
DOM์ด๋ ๋ฌด์์ธ๊ฐ? > DOM์ Document Object Model์ ์ฝ์๋ก, HTML ์์๋ฅผ Object(JavaScript Object)์ฒ๋ผ ์กฐ์(Manipulation)ํ ์ ์๋ Model์ ๋๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉด, DOM์ผ๋ก HTML์
ํธ์ด์คํ : ์ค์ฝํ ๋ด๋ถ ์ด๋์๋ ๋ณ์ ์ ์ธ์ ์ต์์์ ์ ์ธ๋ ๊ฒ์ฒ๋ผ ํ๋ var๋ ์ค๋ณต ์ ์ธ์ด ๊ฐ๋ฅํ๋ค ์ฆ, ํ๋ฒ ์ ์ธ๋ ๋ณ์๋ ๋ค์ ์ ์ธํ ์ ์๋ค. ๋ํ ์ ์ธ๋๊ธฐ ์ ์ ์ฌ์ฉํ ์ ์๋ค. ์ ์ธ์ ํธ์ด์คํ ๋์ด์ง์ง๋ง ํ ๋น์ ํธ์ด์คํ ๋์ด์ง์ง ์๋๋ค. ์ฆ, name์ด๋ผ๋
์ฐ๋ฆฌ๋ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ๋ ํ์์ ์ ๋ณด, ์ํ์ ์ ๋ณด๋ฑ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ง๋ค์ด์ผ ํ ๋๊ฐ ์๋ค! ์ด๋ฌํ ๊ฒฝ์ฐ ์์ฑ์ ํจ์๋ class๋ฅผ ์ด์ฉํ๋ฉด ์ข๋ค! es6์ class๊ฐ ์ถ๊ฐ๋์์ผ๋ฏ๋ก ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ข๋ค๊ณ ํ๋น!์์ฑ์ ํจ์๋ ๋ณดํต ์ฒซ ๊ธ์๋ ๋
a๋ผ๋ ๋ณ์๊ฐ ์๊ณ , user๋ผ๋ ๊ฐ์ฒด๊ฐ ์๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฒด์ age๋ผ๋ ํค ๋์ ์ \[a]๋ก ์ฌ์ฉํด๋ ๋์ผํ๋ค.์ด๋ ๊ฒ \[] ๋๊ดํธ๋ก ๋ฌถ์ด์ฃผ๋ฉด a๋ผ๋ ๋ฌธ์์ด์ด ์๋๋ผ ๋ณ์ a์ ํ ๋น๋ ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋๋ค. ์ด๋ฅผ Computed property(๊ณ์ฐ๋ ํ๋กํผํฐ)๋ผ๊ณ ๋ถ
๊ฐ์ฒด์ Property ํค๋ ๋ฌธ์ํ์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ค!์ซ์ํ์ด๋ booleanํ์ผ๋ก ๋ง๋ค์ด๋ Object.keys(obj)๋ฅผ ํตํด์ \["1", "false"]๋ฌธ์ํ์ผ๋ก ๋ฐํ๋๋ ๊ฒ์ ์ ์ ์๋ค. ์ค์ ๋ก ์ ๊ทผํ ๋์๋ ๋ฌธ์ '1'์ด๋ 'false'๋ก ์ ๊ทผํ ์ ์๋ค.์ด
์ฐ๋ฆฌ๊ฐ ์ค์ํ์์ ์ฌ์ฉํ๊ณ ์๋ ์ซ์๋ 10์ง์์ด๋ค. ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด 2์ง์๋ ์์ํํ์ ์ํด 16์ง์๊ฐ ํ์ํ ๋๊ฐ ์๋ค. ์ด ๋ 10์ง์๋ฅผ 2์ง์๋ 16์ง์๋ก ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์num์ 10์ด๋ผ๋ ๊ฐ์ด ๋ค์ด๊ฐ์๊ณ , ๋ณ์๋ช .toString()์ ์คํํด๋ณด๋ฉด ์ด
๋ฌธ์์ด์๋ ์์๋ฐ์ดํ('') , ํฐ๋ฐ์ดํ("") ๋ฐฑํฑ๊ธฐํธ(\`\`) 3๊ฐ์ง๊ฐ ์๋ค.์๋ฅผ ๋ค์ด html ์ฝ๋ ๊ฒฝ์ฐ์๋ ์์ ๋ฐ์ดํ๋ก ๊ฐ์ธ๋ ๊ฒ ํธ๋ฆฌํ๋ค. ๋ฐ๋ฉด์ ์์ด๋ก ๋ ๋ฌธ์ฅ์ ํฐ ๋ฐ์ดํ๋ก ๊ฐ์ธ๋ ๊ฒ ํธ๋ฆฌํ๋ค.๋ฐฑํฑ์ ๋ฌ๋ฌ$์ ์ค๊ดํธ{}๋ฅผ ์ด์ฉํด ๋ณ์๋ฅผ ํํํ๊ฑฐ๋ ํํ์
๋ฐฐ์ด์ ๋ํ์ ์ธ ๋ฉ์๋๋ค์๋ push(), pop(), unshift() shift()๊ฐ ์๋ค. ์ด ์ธ์ ๋ฉ์๋๋ค์๋ ์ด๋ค ๊ฒ๋ค์ด ์๋์ง ์์๋ณด์!arr.splice(n,m)๋ n๋ฒ์งธ ์์๋ถํฐ m๊ฐ๋ฅผ ์ง์ฐ๋ผ๋ ์๋ฏธ๋ก ์ฌ์ฉ๋์ด์ง๋ค. ์ธ๋ฑ์ค 1๋ถํฐ 2๊ฐ๋ฅผ ์ง์ฐ๊ฒ ๋๋ค๋ฉด \
๊ตฌ์กฐ ๋ถํด ํ ๋น ๊ตฌ๋ฌธ์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ์ ๋ถํดํด์ ๊ทธ ๊ฐ์ ๋ณ์์ ๋ด์ ์ ์๋๋ก ํ๋ ํํ์๋ง์ฝ ํด๋นํ๋ ๊ฐ์ด ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?undefined๊ฐ ๋ค์ด๊ฐ๋ค.a์๋ 1์ด ๋ค์ด๊ฐ๊ณ , b์๋ 2๊ฐ ๋ค์ด๊ฐ์ง๋ง, c์๋ undefined๊ฐ ๋ค์ด๊ฐ๋ค!์ด ๋ ๊ธฐ๋ณธ๊ฐ์ ์ฃผ
๋๋จธ์ง ๋งค๊ฐ๋ณ์์ ์ ๊ฐ ๊ตฌ๋ฌธ์ ... ๋ก ์ฌ์ฉ๋์ด์ง๋ค.๊ทธ๋ ๋ค๋ฉด ์ด ๋์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น?๋๋จธ์ง ๋งค๊ฐ๋ณ์๋ ํจ์์ ์ธ์ ์ ๋ฌ ์์ ๋ง์ง๋ง์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ์ ๋ฌ๋ ์ธ์๋ค์ ๋ชฉ๋ก์ ๋ฐฐ์ด๋ก ์์ถํ ๋ ์ฌ์ฉ๋์ด์ง๋ค. ์ ๊ฐ ๊ตฌ๋ฌธ์ ๋ญ์ณ์๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ค์ ๊ฐ๋ณ์ ์ธ ๊ฐ๋ค์ ๋ชฉ๋ก์ผ๋ก
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ดํ์ ํ๊ฒฝ(Lexical Environment)์ ๊ฐ๋๋ค.์ดํ์ ํ๊ฒฝ์ด๋...?=> ๊ฐ๋จํ๊ฒ ์๊ฐํ๋ฉด, ์ ์ ์ธ(๋ณํ์ง ์๋) ํ๊ฒฝ์ด๋ค!์ด๋ฌํ ์ฝ๋๊ฐ ์์ ๋ ์ด๋ป๊ฒ ๋์ํ๋ ์ง ์์๋ณด์!์ฝ๋๊ฐ ์คํ๋๋ฉด ์คํฌ๋ฆฝํธ์์ ์ ์ธํ ๋ณ์๋ค์ด Lexical ํ๊ฒฝ์
์ผ์ ์๊ฐ์ด ์ง๋ ํ ํจ์๋ฅผ ์คํ์ด ์ฝ๋๋ 3์ด ํ์ ๋ก๊ทธ๋ฅผ ์ฐ์ด์ค๋ค. setTimeOutํจ์๋ ๋ ๊ฐ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋๋ค. 1๋ฒ์งธ์๋ ์ผ์ ์๊ฐ์ด ์ง๋ ํ์ ์คํํด์ฃผ๋ ํจ์์ด๊ณ , ๋๋ฒ์งธ๋ ์๊ฐ์ด๋ค. 3000์ 3s๋ฅผ ์๋ฏธํ๋ค. ๋ํ ์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์๋ค.๋ง์ฝ ์ธ์๊ฐ
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ ์ธ์๋ ํจ์๋ฅผ ์ด๋์ ์ด๋ป๊ฒ ํธ์ถํ๋๋์ ๊ด๊ณ ์์ด this๊ฐ ๋ฌด์์ธ์ง ์ง์ ํ ์ ์๋ค. ๊ทธ๋ผ ์ฌ๊ธฐ์ this๋ ์ ํํ ๋ญ๋ฐ? ๋ผ๊ณ ์๋ฌธ์ด ๋ค ๊ฒ์ด๋ค.this๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ค๋ฅธ ์ธ์ด์ ๋น๊ตํ์ ๋ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ๋์ํ๋ค. ๋๋ถ๋ถ์ ๊ฒฝ