๋ชฉ๋ก๐จFrontEnd/Javascript (13)
Input + Output = True

๐Javascript] 'use strict' โ ์๊ฒฉ๋ชจ๋ (use strict) 'use strict'๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์๊ฒฉ๋ชจ๋๋ฅผ ์คํํ๋ค ์๊ฒฉ๋ชจ๋๋ ์ ์ธํ์ง ์์ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๋ฑ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๊ฒฉํ ๊ธฐ์ค์ด ์ ์ฉ๋๋ ๊ฒ์ ๋งํ๋ค ์๊ฒฉ๋ชจ๋์ ์ฌ์ฉ ์ฌ๋ถ์ ๋ฐ๋ฅธ ์ฐจ์ด์ ์ ์ดํด๋ณด์ function test() { x = 5 } test() console.log(x) // 5 ์ ์ธ๋์ง ์์ ๋ณ์ x๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ์ถ๋ ฅ๋ ๊ฒ ๊ฐ์ง๋ง ์คํํด๋ณด๋ฉด ์ ์ ์๋ํ๋ค ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์๋ฌต์ ์ผ๋ก ์ ์ญ ๋ณ์๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ ์ ์๋ํ๊ฒ ๋๋ค๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋์ ์ฝ๋๋ true๊ฐ ๋๋ค function test() { x = 5 } test() console.log(x) // 5 cons..

๐Javascript] ์๋ฐ์คํฌ๋ฆฝํธ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ - ์ฝ ์คํ, ๋ฉ๋ชจ๋ฆฌ ํ ๋ฉ๋ชจ๋ฆฌ (RAM) - Random Access Memory ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํจํฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํ๋ฉฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด์ง๋ง ์ปดํจํฐ ๋๋ ํด๋น ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ฉด ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ฌ๋ผ์ง๋ค โ ์ฝ ์คํ, ๋ฉ๋ชจ๋ฆฌ ํ์ด๋? 1. ์ฝ์คํ(Call Stack) ์์ํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค(string, number, boolean, null, undefined, bigint, symbol) ์คํ์ปจํ ์คํธ(Execution Context)๋ฅผ ํตํด ์๋ ์์ ๋ค์ ์ ์ดํ๋ค ๋ณ์ ์๋ณ์(์ด๋ฆ) ์ ์ฅ ์ค์ฝํ ์ฒด์ธ ๋ฐ this ๊ด๋ฆฌ ์ฝ๋ ์คํ ์์ ๊ด๋ฆฌ ๋ฑ์ ์ํ 2. ๋ฉ๋ชจ๋ฆฌ ํ(Memory Heap) ์ฐธ์กฐํ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค..

๐Javascript] ์ค์ฝํ, ์ค์ฝํ์ฒด์ธ, ๋ ์์ปฌ ์ค์ฝํ โ ์ค์ฝํ Scope ์ค์ฝํ (Scope) - ๋ฒ์ Javascript์์ ์ค์ฝํ๋ ‘์๋ณ์(๋ณ์)์ ์ ๊ทผํ ์ ์๋ ์ ํจ๋ฒ์’๋ฅผ ๋ปํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ค์ฝํ๋ 2๊ฐ์ง ํ์ ์ด ์๋ค. 1. Global (์ ์ญ) 2. Local (์ง์ญ) ์ ์ญ ์ค์ฝํ(Global Scope)๋ ์ ์ญ์ ์ ์ธ๋์ด ์์ด ์ด๋ ๊ณณ์์๋ ํด๋น ๋ณ์์ ์ ๊ทผํ ์ ์๊ณ ์ง์ญ ์ค์ฝํ(Local Scope)๋ ํด๋น ์ง์ญ์์๋ง ์ ๊ทผํ ์ ์๋ค. let a = "global" function aPrint() { let a = "local" console.log(`aPrint : ${a}`) } aPrint() //aPrint : local console.log(`global : ${a}..

๐Javascript] ์๋ฐ์คํฌ๋ฆฝํธ this this๋ ํจ์ ํธ์ถ ๋ฐฉ์์ ์ํด ๊ฒฐ์ ๋๋ค. โ this ๋? this๋ ํจ์ ํธ์ถ ๋ฐฉ์์ ์ํด ๊ฒฐ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ this๋ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ ์ญ๊ฐ์ฒด(๋ธ๋ผ์ฐ์ ์์๋ window)์ด๋ค. this๋ฅผ ์ฐ์ด๋ณด์. this // Window {...} ํจ์์ this๋ ์ด๋จ๊น? function a() { console.log(this) } a() // Window {...} ์ด์ฒ๋ผ ์ผ๋ฐ ํจ์๋ด์ this๋ window๋ฅผ ๊ฐ๋ฆฌํจ๋ค. (strict ๋ชจ๋์ผ ๊ฒฝ์ฐ๋ undefined์ด๋ค.) ๊ทธ๋ ๋ค๋ฉด this๊ฐ window๊ฐ ์๋ ๊ฒฝ์ฐ๋ ๋ฌด์์ด ์์๊น? โ ๊ฐ์ฒด ๋ฉ์๋์ this const obj = { a: function() { console.log(this) } } ..

๐ Parameter์ Argument์ ์ฐจ์ด Parameter์ Argument๋ ํ๋ก๊ทธ๋๋ฐ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ฉ์ด์ด๊ณ ์ด ๋์ ์๋ก ๋น์ทํ ๊ฐ๋ ์ด์ง๋ง, ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. Parameter๋ ํจ์๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ๋๋ ๋ณ์ ์ด๋ฆ์ด๋ฉฐ (์ธ์) Argument๋ ํจ์๋ฅผ ํธ์ถํ ๋ ์ ๋ฌ๋๋ ์ค์ ๊ฐ์ด๋ค. (์ธ์) function sum(a, b) { // Parameter return a + b; } sum(1, 2) // Argument

๐ ์๋ฐ์คํฌ๋ฆฝํธ ํธ์ด์คํ ๊ณผ TDZ โ ํธ์ด์คํ ํธ์ด์คํ (Hoisting) ์ฝ๋ ์คํ ์ ๋ณ์์ ํจ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ํ ๋นํ๋ ๊ฒ. ์ฝ๋์์ ์ ์ธ๋ ์์น์ ์๊ด์์ด ๋ณ์ ๋ฐ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. ์ฆ, ๋ณ์ ๋ฐ ํจ์ ์ ์ธ์ด ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง๋ ๊ฒ ๊ฐ์ ํ์์ ์๋ฏธํ๋ค. ํธ์ด์คํ ๊ท์น ํธ์ด์คํ ์ ํฌ๊ฒ ํจ์ ํธ์ด์คํ ๊ณผ ๋ณ์ ํธ์ด์คํ ์ผ๋ก ๋๋๋ค. ์ ์ธ๋ ํจ์๋ ์๋จ์์ ์ฐธ์กฐ, ํธ์ถ ๊ฐ๋ฅ. ์ ์ธ๋ var ๋ ์๋จ์์ ์ฐธ์กฐ, ํ ๋น ๊ฐ๋ฅ. ์ ์ธ๋ let, const ๋ ์๋จ์์ ์ฐธ์กฐ, ํ ๋น ๋ถ๊ฐ๋ฅ. [ํจ์ ์ ์ธ๋ฌธ๊ณผ ํจ์ ํํ์์์ ํธ์ด์คํ ๋ฐฉ์์ ์ฐจ์ด] function declaration(){ //ํจ์ ์ ์ธ๋ฌธ console.log('ํจ์ ์ ์ธ๋ฌธ') } declaration() cons..

๐์๋ฐ์คํฌ๋ฆฝํธ Promise async await ์ค๋ช ๋ฐ ์์ โ JavaScript Promise ๋? JavaScript Promise๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ด๋ค. ์ด๋ค ์์ ์ด ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ๊ทธ ์์ ์ด ์๋ฃ๋๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. ์ฆ, Promise๋ ๋น๋๊ธฐ ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค. Promise๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ด ์๋ค. ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด Promise์ ์ํ๋ ๋๊ธฐ(Pending), ์ดํ(Fulfilled), ๊ฑฐ๋ถ(Rejected) ์ธ ๊ฐ์ง ์ํ ์ค ํ๋๋ฅผ ๊ฐ๋๋ค. Promise๋ ๋จ ํ ๋ฒ๋ง ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. Promise๋ ๋๊ธฐ(Pending) ์ํ์์ ์์ํด ์ดํ(Fulfilled) ๋๋ ๊ฑฐ๋ถ(Rejected) ์ํ ์ค ํ๋๋ก ๋ณ๊ฒฝ๋๋ค. ์ดํ ..

์๋ฐ์คํฌ๋ฆฝํธ ์กฐ๊ฑด๋ฌธ์ if, switch ๋ฑ ๋ง์ด ์๊ณ , ์ค๋์ ๊ทธ ์ค ์ฐ์ฐ์ ์กฐ๊ฑด๋ฌธ์ ์์๋ณด์ ์๋ฐ์คํฌ๋ฆฝํธ ์ผํญ์ฐ์ฐ์ const isState = true isState ? true์ผ ๊ฒฝ์ฐ ์คํ๋ฌธ : false์ผ ๊ฒฝ์ฐ ์คํ๋ฌธ // false์ผ ๊ฒฝ์ฐ ์๋ฌด๊ฒ๋ ์คํํ์ง ์๊ณ ์ถ์ ๊ฒฝ์ฐ์ ๋ณดํต ์ด๋ ๊ฒ ์ฌ์ฉํ๋ค isState ? true์ผ ๊ฒฝ์ฐ ์คํ๋ฌธ : null ์ผํญ์ฐ์ฐ์์์ ์ด๋ ํ ๊ฒฝ์ฐ์ ์๋ฌด๊ฒ๋ ์คํํ๊ณ ์ถ์ง ์์ ๋ ์์ ๋ด์ฉ์ฒ๋ผ null์ ์ฌ์ฉํด์ ์๋ฌด๊ฒ๋ ์๋๋ผ๋ ๋ช ์๋ฅผ ํด์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์๋ต ๊ฐ๋ฅํ ์ฝ๋๋ผ๊ณ ์๊ฐ๋๋ค. ์ด๋ด ๋ ์๋์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด๋ณด์ ์๋ฐ์คํฌ๋ฆฝํธ ์ดํญ์ฐ์ฐ์ const isState = true isState && true์ผ ๊ฒฝ์ฐ ์คํ๋ฌธ // ์กฐ๊ฑด๊ณผ && ํ์๋ฅผ ์ฌ์ฉํด์ ์กฐ๊ฑด์..

๐ ์๋ฐ์คํฌ๋ฆฝํธ ๋น๋๊ธฐ ์๋ฆฌ - ์ฑ๊ธ์ค๋ ๋ ๋น๋๊ธฐ ์ค๋ ๋(thread) ์ด๋ ํ ํ๋ก๊ทธ๋จ ๋ด์์, ํนํ ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ํ๋ฆ์ ๋จ์๋ฅผ ๋งํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ ํ๋ก๊ทธ๋จ์ ํ๋์ ์ค๋ ๋๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, ํ๋ก๊ทธ๋จ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ ์ด์์ ์ค๋ ๋๋ฅผ ๋์์ ์คํํ ์ ์๋ค. ์ด๋ฌํ ์คํ ๋ฐฉ์์ ๋ฉํฐ์ค๋ ๋(multithread)๋ผ๊ณ ํ๋ค. -์ํค๋ฐฑ๊ณผ- ์๋ฐ์คํฌ๋ฆฝํธ๋ '๋จ์ผ ์ค๋ ๋' ๊ธฐ๋ฐ์ ์ธ์ด๋ค. ์ค๋ ๋๊ฐ ํ๋๋ผ๋ ๋ง์, ๋์์ ํ๋์ ์์ ๋ง ์ฒ๋ฆฌํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ฌ์ฉ๋๋ ์น์ฌ์ดํธ๋ค์ ๋ณด๋ฉด HTTP ์์ฒญ ์ ์ก, ์ ๋๋ฉ์ด์ , ๋ฒํผ ํด๋ฆญ ๋ฑ ๋ค์ํ ์ผ๋ค์ ๋์์ ์ฒ๋ฆฌํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ฑ๊ธ ์ค๋ ๋์์๋ ์ด๋ ๊ฒ ๋์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ด์ ๋ฅผ ์์๋ณด์. โ Event Loop ๊ฐ์ฅ ๋จผ์ ..

๐ ์ต์ ๋ ์ฒด์ด๋์ด๋? โ ์ต์ ๋ ์ฒด์ด๋?. ์ต์ ๋ ์ฒด์ด๋(optional chaining) ?. ์ ์ฌ์ฉํ๋ฉด ํ๋กํผํฐ๊ฐ ์๋ ์ค์ฒฉ ๊ฐ์ฒด๋ฅผ ์๋ฌ ์์ด ์์ ํ๊ฒ ์ ๊ทผํ ์ ์์ต๋๋ค. ex) user.getAddress?.() โ ์ต์ ๋ ์ฒด์ด๋์ด ํ์ํ ์ด์ ์๋ ์ ๋ณด ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๋ช ์๊ณ , ๊ทธ์ค ๋ช ๋ช ์ ์ฃผ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ์ด๋ด ๋ user.address.street๋ฅผ ์ฌ์ฉํด ์ฃผ์ ์ ๋ณด์ ์ ๊ทผํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค. let user = {} //์ฃผ์ ์ ๋ณด๊ฐ ์๋ ์ฌ์ฉ์ console.log(user.address.street) //TypeError: Cannot read property 'street' of undefined ์์ง ๊ทธ๋ ค์ง์ง ์์ DOM ๋ ๋ค๋ฅธ ์ํฉ์ผ๋ก๋ ์..