๐ฉ๐ป๐ปSTUDY/JavaScript (13) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ [JavaScript] ๋น๊ตฌ์กฐํ(๊ตฌ์กฐ๋ถํด) ํ ๋น ๋ณดํธ๋์ด ์๋ ๊ธ์ ๋๋ค. [JavaScript] e.target , e.currentTarget e.target , e.curentTarget ์ฐจ์ด์ ๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, e.target :: ์ค์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ ์์ (๋๋ง ์ด๋ฒคํธ ๋ฐ์) e.currentTarget :: ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๋ฌ๋ฆฐ ์์ (์์ ํด๋ฆญํด๋ ๋ถ๋ชจ๋ ์ด๋ฒคํธ ์์) outer inner button const outer = document.getElementById('outer'); const inner = document.getElementById('inner'); const button = document.getElementById('button'); function printLog(e) { const { target, e.currentTarget } = e; console.log(`target: ${target.id}, .. [JavaScript] ์ฐธ์กฐ์ ์ํ ๊ฐ์ฒด ๋ณต์ฌ ์ฐธ์กฐ์ ์ํ ๊ฐ์ฒด๋ณต์ฌ ๊ฐ์ฒด์ ์์ํ์ ์ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด ์ค ํ๋๋ ๊ฐ์ฒด๋ '์ฐธ์กฐ์ ์ํด(by reference)' ์ ์ฅ๋๊ณ ๋ณต์ฌ๋๋ค. ์์๊ฐ(๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฐ ๊ฐ)์ '๊ฐ ๊ทธ๋๋ก' ์ ์ฅ·ํ ๋น๋๊ณ ๋ณต์ฌ๋๋ค. let message = 'Hello'; let cloneMessage = message; cloneMessage = 'CloneHello'; console.log(message, cloneMessage); // Hello CloneHello ๊ฐ์ฒด๊ฐ ํ ๋น๋ ๋ณ์๋ฅผ ๋ณต์ฌํ๋ฉด ๋์ผํ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ๊ฐ์ด ํ๋ ๋ ๋ง๋ค์ด์ง๋ค. let user = { name: 'John'; } let admin = user; admin.name = .. [JavaScript] ๊ฐ์ฒด ์์๊ฐ์ฒด const๋ก ์ ์ธ๋ ๊ฐ์ฒด๋ ์์ ๋ ์ ์๋ค. const user = { name: 'John' }; user.name = 'Pete'; console.log(user.name); // Pete const๋ ํ ๋ฒ์ด๋ผ๋ ๊ฐ์ ํ ๋นํ ๋ณ์๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฑธ ๋ง๋๋ค. ๋ณ์ user๋ ๊ฐ์ฒด ์ฐธ์กฐ ๊ฐ์ ์ ์ฅํ๊ณ ์๋๋ฐ, const๋ ์ด ๊ฐ์ด ๋ณ๊ฒฝ๋๋๊ฑธ ๋ง๋ ๊ฒ์ด์ง, ๊ฐ์ฒด์ ๋ด์ฉ (ํ๋กํผํฐ)์ ๋ณ๊ฒฝํ๋ ๊ฑด ๋ง์ง์๋๋ค. ๊ณ์ฐ๋ ํ๋กํผํฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์์ ํ๋กํผํฐ ํค๊ฐ ๋๊ดํธ๋ก ๋๋ฌ์ธ์ฌ ์์ ๊ฒฝ์ฐ, ์ด๋ฅผ ๊ณ์ฐ๋ ํ๋กํผํฐ (computed propery) ๋ผ๊ณ ๋ถ๋ฅธ๋ค. let fruit = prompt('์ด๋ค ๊ณผ์ผ์ ๊ตฌ๋งคํ์๊ฒ ์ต๋๊น?', 'appl.. [JavaScript] nullish ๋ณํฉ ์ฐ์ฐ์ ?? nullish ๋ณํฉ์ฐ์ฐ์ ?? ์ต๊ทผ์ ์ถ๊ฐ๋จ. ์คํ์ ์ถ๊ฐ๋์ง ์ผ๋ง์๋ ๋ฌธ๋ฒ. ๊ตฌ์ ๋ธ๋ผ์ฐ์ ๋ ํด๋ฆฌํ์ด ํ์ํ๋ค. nullsh ๋ณํฉ์ฐ์ฐ์(nullish coalescing operator) ??๋ฅผ ์ฌ์ฉํ๋ฉด ์งง์ ๋ฌธ๋ฒ์ผ๋ก ์ฌ๋ฌ ํผ์ฐ์ฐ์ ์ค ๊ทธ ๊ฐ์ด ํ์ ๋์ด ์๋ ๋ณ์๋ฅผ ์ฐพ์ ์ ์๋ค. a ?? b ์ ํ๊ฐ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค. a๊ฐ null๋ ์๋๊ณ undefined๋ ์๋๋ฉด a ๊ทธ ์ธ์ ๊ฒฝ์ฐ b nullish ๋ณํฉ ์ฐ์ฐ์ ??์์ด x = a ?? b์ ๋์ผํ ๋์์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. x = (a !== null && a !== undefined) ? a : b; ??์ ||์ ์ฐจ์ด ||๋ ์ฒซ ๋ฒ์งธ truthy๊ฐ์ ๋ฐํ. ??๋ ์ฒซ ๋ฒ์งธ ์ ์๋(defined) ๊ฐ์ ๋ฐํ. null๊ณผ un.. [JavaScript] return์ด ํ๋ ์ผ ๊ฐ์ ๋ฐํํ๋๋ฐ ์ฌ์ฉ. ์ง์ญ๋ณ์์ ๊ฐ์ ์๋๋ฐ ์ฌ์ฉ. ํ์ฌ ์งํ์ค์ธ ํจ์๋ฅผ ์ค์ง(escape). 1. ๊ฐ์ ๋ฐํํ๋๋ฐ ์ฌ์ฉ + 2. ์ง์ญ๋ณ์์ ๊ฐ์ ์๋๋ฐ ์ฌ์ฉ. [์์ 1] var test = function() { var x = 1; } test(); console.log(test()); // undefined ์์ ํจ์๋ ์คํ๋์ง ์๋๋ค. ๋ด๋ถ ๊ตฌ๋ฌธ๋ค์ ์คํ(test())ํ์์ผ๋ ๋ฐํํ ๊ฐ์ด ์ ์ธ๋์ง ์์๋ค. x๋ฅผ ์ป๊ธฐ ์ํด์ return์ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค. var test = function() { var x = 1; return x; } var test2 = test(); console.log(test2); test() ํจ์๋ฅผ ์คํํ ๊ฒฝ์ฐ ํด๋นํจ์๋ 1์ ๋ฐํํ๋ค. ๋ฐํ๊ฐ์ ์ฌ์ฉํ๊ธฐ .. [JS] script async/defer *parsing :: https://solog4something.tistory.com/13 (+)21.10.26 ์ถ๊ฐ ํ์ฑ์ ํด๋น ์ธ์ด์ ๋ฌธ๋ฒ๊ฒ์ฌ๊ธฐ๋ผ๊ณ ํ ์ ์๋ค. ๋คํธ์ํฌ๋ก ๋ฐ์ HTML๊ณผ CSS ํ์ผ์ ํ ํฐํ ์ํค๊ณ Parse Tree๋ฅผ ์์ฑํ๋ค. ์ด Parse Tree๋ฅผ DOM ํธ๋ฆฌ๋ก ๋ง๋ค์ด ๋ ๋ํ๊ฒ ๋๋ค. ํ์ง๋ง HTML์ ํ๋ฉด์ ๋ณด์ด๊ธฐ ์ํด ํ์ฑํ๋ ๋์ค์ ํ์ฑ์ ๋ฉ์ถ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค. ์๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณด์. script ์๋ฐ์คํฌ๋ฆฝํธ๋ *parser blocking resource(ํ์ ์ฐจ๋จ ๋ฆฌ์์ค)์ด๋ค. ๊ธฐ๋ณธ ๋ชจ๋๋ก ๋ธ๋ผ์ฐ์ ๋ ๋ฌธ์๋ฅผ ํ์ฑํด ์ฝ๋ค๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ฉด ์งํํ๊ณ ์์๋ ํ์ฑ์ ๋ฉ์ถ๊ณ , ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด > ํ์ฑ > ์คํ ํ ํ ๋ค์ HTML ๋ฌธ์๋ฅผ ํ์ฑํ๊ฒ ๋๋ค. ์คํฌ๋ฆฝํธ๋ .. [JavaScript / ES6] let, const์ ๋ธ๋ก ๋ ๋ฒจ ์ค์ฝํ ES5๊น์ง var ํค์๋๋ก ์ ์ธ๋ ๋ณ์๋ ์๋์ ๊ฐ์ ํน์ง์ด ์๋ค. ํ์ง๋ง ์ด๋ ๋ค๋ฅธ ์ธ์ด์๋ ๋ค๋ฅธ ํน์ง์ผ๋ก ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ์์ผ๋ฉด ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค. ํจ์ ๋ ๋ฒจ ์ค์ฝํ(Function-level Scope) ํจ์์ ์ฝ๋ ๋ธ๋ก๋ง ์ค์ฝํ ์ธ์ . ๋ฐ๋ผ์ ์ ์ญ ํจ์ ์ธ๋ถ์์ ์์ฑํ ๋ณ์๋ ๋ชจ๋ ์ ์ญ ๋ณ์์ด๋ค. ์ด๋ ์ ์ญ ๋ณ์๋ฅผ ๋จ๋ฐํ ๊ฐ๋ฅ์ฑ์ ๋์ธ๋ค. for ๋ฌธ์ ๋ณ์ ์ ์ธ๋ฌธ์์ ์ ์ธํ ๋ณ์๋ฅผ for ๋ฌธ์ ์ฝ๋ ๋ธ๋ก ์ธ๋ถ์์ ์ฐธ์กฐํ ์ ์๋ค. var ํค์๋ ์๋ต ํ์ฉ ์๋ฌต์ ์ ์ญ ๋ณ์๋ฅผ ๋จ๋ฐํ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค. ๋ณ์ ์ค๋ณต ์ ์ธ ํ์ฉ ์๋ํ์ง ์์ ๋ณ์๊ฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ํผ๋์ ๋์ผ ์ ์๋ค. ๋ณ์ ํธ์ด์คํ ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ ์ด์ ์ ์ฐธ์กฐํ ์ ์๋ค. ES6๋ ์ด๋ฌํ var ํค์๋์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด let.. ์ด์ 1 2 ๋ค์