: var์ function-level scope๋ฅผ ๊ฐ์ง๊ณ , let๊ณผ const๋ block-level scope๋ฅผ ๊ฐ์ง๋ค.
var์ ์ค๋ณต์ ์ธ, ์ฌ์ ์๊ฐ ๊ฐ๋ฅํ์ง๋ง let์ ์ค๋ณต์ ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ค. ํธ์ด์คํ
์ด ๊ฐ๋ฅํ์ง๋ง ์ค์ ๋ก๋ ์ ๋๋ ๊ฒ์ฒ๋ผ ๋์ํ๋ค. const๋ ์์๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉํด ๋ณ์์ ๋ํ ์ฌํ ๋น์ด ๊ธ์ง๋๋ค.
: ์ฝ๋์์ ์๋์ชฝ์ ์ ์ธํ ๋ณ์๊ฐ scope์ ์ต์๋จ์ผ๋ก ๋์ด ์ฌ๋ ค์ง ๊ฒ ๊ฐ์ ํ์์ ๋งํ๋ค. ํ๋ก๊ทธ๋จ์ ์ํํ ๋ ๋ชจ๋ ์๋ณ์๋ฅผ ํ๋จํ ํ์ runtime์ผ๋ก ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๋ณ์ ์ ์ธ๋ณด๋ค ๋จผ์ ํธ์ถ์ ํด๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
: immutable์ ๊ฐ์ด ๋ณํ์ง ์๋๋ค๋ ์๋ฏธ์ด๊ณ , mutable์ ๊ฐ์ด ๋ณํ๋ค๋ ์๋ฏธ์ด๋ค.
: ํน์ ํ ๊ฐ์ ํํํ๊ธฐ ์ํด ์ฌ๋์ด ์ดํดํ ์ ์๋ ๋ฌธ์, ์ฝ์๋ ๊ธฐํธ๋ฅผ ์ด์ฉํ๋ ํ๊ธฐ๋ฒ์ด๋ค.
์ซ์ literal, ๋ฌธ์ literal, ๊ฐ์ฒด literal, ๋ฐฐ์ด literal, ํจ์ literal๊ณผ ๊ฐ์ด ์ฌ๋ฌ ์ข
๋ฅ์ literal์ด ์กด์ฌํ๋ค.
=> Primitive type(์์ ํ์ )์ผ๋ก ์ค์ ๊ฐ์ ์ ์ฅํ๋ค.
=> Reference type์ผ๋ก ๊ฐ์ด ์ ์ฅ๋์ด ์๋ ๊ณณ์ ์ฃผ์๊ฐ์ ์ ์ฅํ๋ค.
ํจ์ ์ ์ธ๋ฌธ
: function keyword๋ฅผ ์ฌ์ฉํด ํจ์๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ๋ ํจ์ ํํ์๊ณผ ๋ค๋ฅด๊ฒ ๋ณ์์ ์ ์ฅ๋์ง ์๋๋ค.
function ํจ์์ด๋ฆ(ํ๋ผ๋ฏธํฐ/๋งค๊ฐ๋ณ์) {๋ฆฌํด๊ฐ} ํ์์ผ๋ก ์ ์ํ๋ค.
ํจ์ ํํ์
: ํจ์ ๋ฆฌํฐ๋ด๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
Function ์์ฑ์
: ์์ ๊ด๊ณ๋ฅผ ์ํด ๋ง๋๋ ๊ฒ์ผ๋ก new Function()์ ์ฌ์ฉํด ํจ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
Arrow function
: ์ถ์ฝ ํํ์ผ๋ก ํจ์๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ค.
: ํจ์ ์ ์ธ๋ฌธ์ hoisting์ด ๋๊ณ , ํจ์ ํํ์์ hoisting์ด ๋์ง ์๋๋ค.
์ฝ๋๋ฅผ ์ฝ์ผ๋ฉด์ ํจ์ ์ ์ธ๋ฌธ์ด ์์ผ๋ฉด ํจ์ ์ด๋ฆ๊ณผ ๋๊ฐ์ ๋ณ์๋ฅผ ๋ง๋ค๊ณ , ํน์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ค. ํน์ ๋ฉ๋ชจ๋ฆฌ์ ํจ์ ๋ด์ฉ์ ๋ฃ๊ณ , ๋ณ์๊ฐ ๊ฐ๋ฅดํค๋ ๋ฉ๋ชจ๋ฆฌ์ ํจ์ ๋ด์ฉ์ด ์ ํ ์ฃผ์๋ฅผ ๋ฃ๋๋ค.
ํ์ง๋ง ํจ์ ํํ์์์๋ ์๋ณ์๋ฅผ ํน์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ์๋ undefined๋ฅผ ๋ฃ๋๋ค. ์ฝ๋๊ฐ ์คํ๋ ๋ ํจ์ ๋ด์ฉ์ ํน์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฃ๊ณ ์๋ณ์๊ฐ ๊ฐ๋ฅดํค๋ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ํจ์ ๋ด์ฉ์ด ์ ํ ์ฃผ์๋ฅผ ๋ฃ๋๋ค.
ํจ์ ์ ์ธ๋ฌธ์ runtime ์ด์ ์ ๋ง๋ค์ด์ง๊ณ , ํจ์ ํํ์์ runtime์ ๋ง๋ค์ด์ง๋ ๊ฒ์ด๋ค.
: ์ค์ฒฉํจ์๋ ํจ์ ์์ ํจ์๊ฐ ๋ ๋ค์ด์๋ ํํ์ด๋ค.
์ฝ๋ฐฑ ํจ์๋ ๊ณ ์ฐจ ํจ์์ ๊ฒฐํฉํ๋ ํจ์๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌ์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค. ๊ณ ์ฐจํจ์๋ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฐ์์ ํฉ์ณ ํ๋์ ๊ธฐ๋ฅ์ ํ๋ ํจ์๋ฅผ ๋งํ๋ค.
: IIFE๋ ์ฆ์ ์คํ ํจ์๋ก ํจ์๋ฅผ ์ ์ธํจ๊ณผ ๋์์ ํธ์ถํ๋ค. ํจ์๋ฅผ ์ฌ์ฌ์ฉ ํ ์ ์๋ค๋ ํน์ง์ด ์๋ค. ๊ทธ๋ผ์๋ ์ฌ์ฉํ๋ ์ด์ ๋ ์ ์ญ ๋ณ์๋ฅผ ์ง์ญ๋ณ์ํ ์ํฌ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ๋ฌ ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ถ๋ฌ์์ ์ฌ์ฉํ๋ฉด ์ ์ญ ๋ณ์๋ค์ด ๊ฐ์ ๊ณต๊ฐ์ ๊ณต์ ํด ๊ฐ์ ์ด๋ฆ์ ๋ณ์๊ฐ ์๊ธฐ๋ฉด ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค. ์ด๋, ์ฆ์ ์คํ ํจ์๋ก ๋ฌถ์ด ๋์ผ๋ฉด ๊ฐ๊ฐ์ ํ์ผ์์ ๊ฐ์ ์ด๋ฆ์ ๋ณ์๊ฐ ์์ด๋ ์ง์ญ๋ณ์๋ก ์ฌ๊ฒจ์ง๊ธฐ ๋๋ฌธ์ ์ถฉ๋์ด ๋ฐ์ํ์ง ์๋๋ค.
์ ์ญ ๋ณ์ ์ฌ์ฉ์ ์ค์ด์ผ ํ๋ ์ด์ ๋ ๊ฐ๋
์ฑ์ด ๋๋น ์ง๊ณ ๋ฉ๋ชจ๋ฆฌ resource๋ฅผ ๋ ์๋ชจํ๊ฒ ๋๋ค. ์ ์ญ ๋ณ์๋ scope chain์ ๊ฐ์ฅ ์๋จ์ ์์นํ๊ธฐ ๋๋ฌธ์ ์ฐพ์ ๋๋ ๋ฆ๊ฒ ์ฐพ๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
: Javascript์์ ์ ๊ณตํ๋ ์์ฑ์ ํจ์์ด๋ค.
Object, String, Array, Number, Boolean, Function ๊ณผ ๊ฐ์ ์์ฑ์ ํจ์๊ฐ ์กด์ฌํ๋ค. ์ด๋ฐ ์์ฑ์ ํจ์๋ค๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
: ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ํจ์์ด๋ค. ์ฌ๋ฌ๊ฐ์ ๋์ผํ property๋ฅผ ๊ฐ์ง๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด ํ์ํ๋ค. "new" keyword๋ฅผ ์ด์ฉํด์ ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์ฐ๋ฉด ์์ฑ์ ํจ์์ด๊ณ , ์๋๋ฉด ์ผ๋ฐ ํจ์๋ก ์ฐ์ด๊ฒ ๋๋ค.
: ๋ด๊ฐ ์ฌ์ฉํ๋ ค๋ property๋ฅผ chain์ ๋ฐ๋ผ์ ์ฐพ์ ๊ฐ๋ ๊ฒ์ด๋ค.
์์ฑ์ ํจ์๋ฅผ ๊ธฐ์ค์ผ๋ก, ์ธ์คํด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ํด์ 2๊ฐ๊ฐ ์กด์ฌํ๋ค. ์์ ์ [[Prototype]] ๋ด๋ถ ์ฌ๋กฏ์ ์ฐธ์กฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ค.
๋์ ์์ : extends ํค์๋ ๋ค์ ๊ฐ์ผ๋ก ํ๊ฐ๋ ์ ์๋ ์์ด ์ฌ ์ ์๋ค.
๋ง๋ค์ด๋ธ ๊ฐ์ฒด.__proto__๋ฅผ ํตํด์ ์์ ๊ด๊ณ๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
: ํจ์์ ๊ทธ ํจ์๊ฐ ์ ์ธ๋ lexical ํ๊ฒฝ์ ์กฐํฉ์ด๋ค.
closure๋ ์ค์ฒฉํจ์๋ก ์ด ์ค์ฒฉํจ์๊ฐ ์ธ๋ถํจ์์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก return ๋๋ค. return ๋๋ ์ค์ฒฉํจ์์ ์๋ช
์ฃผ๊ธฐ๊ฐ ์ธ๋ถํจ์๋ณด๋ค ๊ธธ๊ณ , ์ธ๋ถํจ์์ ์๋ณ์๋ฅผ ์ฐธ์กฐํ๋ค. ์ด๋, ์ค์ฒฉํจ์์์ ์ธ๋ถํจ์์ ๋ํ ์ฐธ์กฐ๊ฐ ๋จ์์๊ธฐ ๋๋ฌธ์ ์ธ๋ถํจ์์ ์คํ์ execution context stack์์ ์ฌ๋ผ์ง์ง๋ง ์ธ๋ถํจ์์ lexical ํ๊ฒฝ์ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์์์ด์ ์ค์ฒฉํจ์์ ์ํด ์ฌ์ฉ๋ ์ ์๋ค.
closure๋ information hiding์ ๊ตฌํํ ๋ ์ฌ์ฉ๋๋ค.
: ํ์ค์ธ๊ณ์ ์กด์ฌํ๋ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ธ๋งํ๋ ์๋จ์ด๋ค. instance๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
์์ฑ์ ํจ์์ ์ ์ฌํ๋ค. class ์์ฒด๊ฐ ํจ์์ด๋ฉด์ ๊ฐ์ฒด์ด๋ค. ์์ฑ์ ํจ์์ ๋ค๋ฅด๊ฒ ๋ฐ๋์ new keyword๊ฐ ํ์ํ๋ค. ์์์ hoisting์ด ๊ฐ๋ฅํ๋ค.
๋ฐฐ์ด์ ๊ฐ๊ฐ ์์๋ฅผ ์ซ์ index๋ก ์ฐธ์กฐํ ์ ์๋ค. ์์๊ฐ ์๊ณ , length๊ฐ ์กด์ฌํ๋ค.