๊ณต๋ถ๋ฅผ ํด๋๊ฐ๋ฉด์ CS์ง์์ ๋ถ์กฑํจ์ ๋๊ปด CSํ์ต์ ๊ธฐ๋ก+ํ์ตํ๊ธฐ ์ํด ์์ผ๋ก ๊ธ์ ์ญ ์จ๋๊ฐ ๊ฒ์ ๋๋ค!! ๋ถ์กฑํ ์ ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ค๋ฅ ์์ , ๋ ์ข์ ๋ฐฉ๋ฒ ๋ฑ ์ฒจ์ธ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!!
์ค๋์ ์บกํดํ๊ต๋์ ๋ธ๋ก๊ทธ๊ธ "๊ฐ๋จํ ํ์ด๋ณด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ"
๋ผ๋ ๋ธ๋ก๊ทธ ๊ธ์ ๋ณด๋ฉฐ ๋ด๊ฐ ์๋ ๊ฒ๊ณผ ๋ชจ๋ฅด๋ ๊ฒ์ ์ ๋ฆฌํด ๋ณด์๋ค.
์ด ๋ถ์ฒ๋ผ ๊ธ๋ ์ ์ฐ๊ณ ์ถ๊ณ ์ฝ๋๋ ์ ์ง๊ณ ์ถ๋ค.. ๋ค๋ฐฉ๋ฉด์์ ๋ฐฐ์ธ์ ์ด ๋ง์ ๋ถ์ด๋ผ ์๊ฐํ๋ค. ์ด๋ ๊ฒ ์ข์ ์ง์์ ๊ณต์ ํด์ฃผ์
์ ์ฐธ ๊ฐ์ฌํ๋ค!!
์บกํํ๊ต - ๋ธ๋ก๊ทธ ์ถ์ฒ
ํธ์ด์คํ
์ ๋ํด ํ์ต์ ํ๋ฉฐ ๋ ๋ค๋ฅธ ๋ธ๋ก๊ทธ์ ๊ธ์ ๋ง์ด ๋์์ ๋ฐ์๋ค.
ํธ์ด์คํ
์ฐธ๊ณ ๋ธ๋ก๊ทธ
ํ์๋ ์ด์ ๊น์ง ํธ์ด์คํ ์ด ๊ทธ์ "๋งจ ์๋ก ์ฌ๋ ค์ฃผ๋ ๊ฑฐ" ๐
์ด๋ ๊ฒ ์ถ์์ ์ผ๋ก ์ฌ์ง์ด ์๋ชป ์๊ณ ์์๋คใ ใ ์ด๋ฒ ๊ธฐํ์ ์๋กญ๊ฒ ๊ฐ๋ ์ ์ ์ํ ์ ์์๋ค.
ํธ์ด์คํ
์ด๋ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ๋ณ์/ํจ์ ์ ์ธ์ ํด๋น ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์ผ๊น?? โ
" ํธ์ด์คํ
(Hoisting) ์ด๋ ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ ๋ณ์/ํจ์ ์ ์ธ์ด ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง ๊ฒ ๊ฐ์ ํ์์ ๋งํ๋ค "โญ๏ธ
์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ "์คํ ์ปจํ ์คํธ ๊ณผ์ "์ ์ดํดํด์ผํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ํ์ํํ๊ณ ๊ตฌ๋ถํ๋ ๊ณผ์ ์ฆ, "์คํ ์ปจํ ์คํธ ๊ณผ์ "์ ๊ฑฐ์น๋ค.
ํด๋น ์คํ ์ปจํ ์คํธ ๊ณผ์ ์์ ๋ชจ๋ ์ ์ธ์ ์ค์ฝํ์ ๋ฑ๋กํ๋ค.
์ฆ, ์คํ์ปจํ ์คํธ๋ ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ํด ํ์ํ ํ๊ฒฝ์ ์๋ฏธํ๋ค.
์ ์คํ์ปจํ ์คํธ ๊ณผ์ ์์ ํธ์ด์คํ ์ด๋ผ๋ ํ์์ด ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
์ ์ธ์ด ์ฝ๋ ์คํ๋ณด๋ค ๋จผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๊ณผ์ ์ผ๋ก ๋ฐ์ํ๋ ํ์์ด๋ค.
ํธ์ด์คํ (hoisting)์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ์/ํจ์ ์ ์ธ์ด ์ค์ฝํ์ ์ต์๋จ์์ ์ด๋ฃจ์ด์ง๋ฉด์ ๋ฐ์ํ๋ ํ์์ด๋ค. ๋ณ์๋ฅผ ์์ฑํ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ธ์ ๊ฐ์ฅ ๋จผ์ ์ ์ฅํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ฐ์ํ๋ ํ์์ด๋ค. ๋ง์น ์ค์ฝํ์ ์ต์๋จ์ผ๋ก ๋ณ์ ์ ์ธ์ด ์ฌ๋ผ์จ ๊ฑฐ ๊ฐ์ ํ์!!
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์ ์ธ์ ํธ์ด์คํ ์ด ์ผ์ด๋๋ค!!
console.log(A)
var A ="123"
// undefined
// ์ ์ธ์ ๋์ง๋ง ๊ฐ์ด ํ ๋น๋์ง ์์๊ธฐ ๋๋ฌธ์ console.log(A)์ ์์ ์์
// undefined๊ฐ ์ฐํ๋ค.
console.log(B)
let B = "123"
// ์ฐธ์กฐ์๋ฌ
// ์๊ทธ๋ด๊น??
์์๋ ๊ฐ์ง๋ง const,let,var์ ํธ์ด์คํ ์ด ์ผ์ด๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ๋ํ๊ณ ์์ผ์ด๋๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ๋ํ๋ค.
๊ทธ๋ ์ง๋ง ์ค์ํ ๊ฒ์ ๋ชจ๋ ํธ์ด์คํ ์ด ์ผ์ด๋ฌ๋ค๋ ์ โ๏ธ
๋ค๋ฅธ์ ์ ๋ค์๊ณผ ๊ฐ๋ค!
const์ let์ ๋ณ์๊ฐ ์ ์ธ๋์ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ธ์ด ์ ์ฅ๋๋ค.
๊ทธ๋ ์ง๋ง ์ด๊ธฐํ ๊ณผ์ ์ด ์ด๋ฃจ์ด์ง์ง์๋๋ค. ์ด๊ฒ์ ์ดํดํ๊ธฐ ์ํด์๋ ๋ณ์๊ฐ ์ด๋ป๊ฒ ์ ์ธ, ์ด๊ธฐํ, ํ ๋น ์ด ์ด๋ฃจ์ด์ง๋์ง ์์์ผํ๋ค.
๋ชจ๋ ๋ณ์๋ ์ ์ธ ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ์ด ๋๋ค. ์ด๋ ์ปจํ
์คํธ๊ณผ์ ์ด๋ผ ๋ณผ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ var์ ์ ์ธ์ด ๋๋ ์์ ์์ ์ด๊ธฐํ๊น์ง ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๊ณ
let๊ณผ const๋ ์ ์ธ์ด ๋๋ ์์ ์์ ์ ์ธ๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ์ด๋๋ค.
์ฌ๊ธฐ์ ์ด๊ธฐํ๋ผ ํจ์ ๋ณ์ ์ ์ธ ํ ํด๋น ๋ณ์์ ๊ฐ์ undefined๋ก ๋น์๋์
ํ ๋น์ ๋ฐ์ ์ค๋น๋ฅผ ํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ดํดํ ์ ์๋ค.
const์ let์ ์ด๊ธฐํ(๋ฉ๋ชจ๋ฆฌํ๋ณดX)๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ ์ ์ธ๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ๋ณ์๊ฐ ์ฌ์ฉ๋๋ ์์ ๋ณด๋ค ๋ ์ดํ์ ์ ์ธ์ด ์ด๋ฃจ์ด์ก๋ค๋ฉด ์ปดํจํฐ๋ ํด๋น ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. ํด๋น ๊ณผ์ ์ TDZ๋ผ๊ณ ํ๋ค. ๋ณ์๊ฐ const๋ let์ผ๋ก ์ ์ธ ๋์ ๋ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง์ง ์์ ์ฐธ์กฐ๋ฅผ ํ ์ ์๋ ๊ตฌ๊ฐ์ ๋งํ๋ค.
var ์ ์ธ๊ณผ ์ด๊ธฐํ๊ฐ ๋์์ ์ด๋ฃจ์ด์ง๊ธฐ๋๋ฌธ์ undefined๋ผ๋ ๊ฐ์ด๋ผ๋ ๊ฐ์ง ์ฑ ์ฌ์ฉ ๋ ์ ์๋ค.
์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง์ง ์๋๋ค๋ฉด ํด๋น ์ง(๋ณ์)๊ฐ ์ด๋ค ์ง์ธ์ง ์ ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋๋ค.
undefined: ๋ณ์์ ๊ฐ์ด ํ ๋น๋์ง ์์์ ๋ ์ปดํจํฐ๊ฐ undefined๋ก ํ ๋น์์ผ์ค๋ค. ์ฆ ์ ์ธ์ ํ๊ณ ๊ฐ์ด ๋ค์ด์ค์ง ์์๊ฑฐ๋ index๋ ์กด์ฌํ๋ ๊ฐ์ด ๋น์ด์๋ค ๋ฑ ์์ด ๋จ์ด ๋ป
๊ทธ๋๋ก <๊ฐ์ด ์๋๊ฑฐ ๊ฐ์๋ฐ? ์ฐพ์ ์ ์์ต๋๋น!> ์ ์๋ฏธ์ด๋ค.
์ด๋ undefined๋ ๊ฐ์ด์ ํ์
์ด ๋๋ค.
null: ๊ฐ๋ฐ์๊ฐ ์๋์ ์ผ๋ก ํ ๋นํ๋ ๊ฐ์ผ๋ก ์ผ๋ถ๋ฌ ๋น ๊ฐ์ ๋ฃ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. ๊ฐ์ null, ํ์ ์ Object์ด๋ค!
๊ฐ์ฒด ํ๋กํผํฐ๋ ์ญ์ ๊ฐ ๊ฐ๋ฅํ๋ค ๊ฐ์ฒด ์์ฒด๋ ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค!!
const Person = {
name: "park",
age:12
}
delete Person
console.log(Person)
//{name:"park", age:12} ๊ฐ์ฒด๋ณํ X
delete Person.age
console.log(Person)
// {name:"park"}
splice
const arr =[1,2,3,4]
arr.splice(1,1)
// console.log(arr) => [1,3,4]
delete
const arr=[1,2,3,4]
delete arr[1]
//console.log(arr)=>[1,undefined,3,4]
==์ ===์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ ํ์ ๊น์ง ๋น๊ตํ๋ ๋ง๋!!
const A = "123"
const B = 123
console.log(A==B) // true
console.log(A===B) // false
String.prototype.printText = function(text){
console.log(`Print this text out` + ${text})
}
const location = "seoul"
location.printText(`GwangJu`)
// Print this text out GwangJu
Object,String,Number ํ์ ์ ๋ค์๊ณผ ๊ฐ์ด prototype์ ์ด์ฉํด์ ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์๋ค.
ํจ์๋ฅผ ์ ์ํจ๊ณผ ๋์์ ๋ฐ๋ก ์คํํ๋ ํจ์
์ธ์ ์ฌ์ฉํ๋ฉด ์ ์ฉํ ๊น?? ํจ์๋ฅผ ์ต์ด 1๋ฒ๋ง ์ฌ์ฉํ ๋!
ex: ์ด๊ธฐํ ์ฝ๋!!
(function(name)
{console.log(`this is the immediate fuction ${name}`)}(`foo`)
๊ธฐ์กด ํจ์๋ฅผ ์ฌ์ฉํ ๋์ (ํจ์)(ํจ์์คํ) ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ๋๋ค.
(function(name){
console.log(name +"is 28")
})(name)
์คํ์ด ๋๋ ํจ์์ ์ค์ฝํ๋ฅผ ์ฐธ์กฐํ ์ ์๋ ํจ์
(์คํ์ด ๋๋ ํจ์์ ์ ๊ทผํ ์ ์๋ ํจ์)
function parent() {
var a = 'Parent is done';
function child() {
console.log(a);
}
//๋ด๋ถ์ child์ ์ ๊ทผํ ์ ์์๊น?
return child;//return์ ํด์ ๋ด๋ถ์ ํจ์๋ฅผ ์ธ๋ถ๋ก ๊ฐ์ ธ์ด
}
var closure = parent();
//parent๋ ํด๋ก์ ํจ์
closure();
์ child๋ ์ธ๋ถ์์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅํ๋ค ํ์ง๋ง Return์ child๋ฅผ ๋ฃ์ด
์ธ๋ถ์์ parentํจ์์ ๊ฒฐ๊ณผ๊ฐ ์ฆ parent()๋ฅผ ์ฌ์ฉํด ๋ณ์์ ํ ๋นํด
๋ด๋ถ์ ์๋ child์ ์ ๊ทผํ ์ ์๋ค. ์ด๊ฒ์ด ํด๋ก์ ์ด๋ค
์ฅ์
๐ฅํด๋ก์ ํจ์๋ ์ฆ, ์์ ์ด ์ ์ธ ๋ ๋น์์ ํ๊ฒฝ์ ๊ธฐ์ตํ๋ ํจ์๐ฅ
์ค๋์ ๊ณต๋ถ๋ JS ๊ธฐ์ด์ ๋ํด ๋ค์ ํ๋ฒ ํ์ตํด๋ณด๊ณ ์์ง๋ ๋ชจ๋ฅด๋ ์ ์ด ๋ง์๊ธฐ ๋๋ฌธ์ ๋์ฑ ์ด์ฌํ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ํนํ ๊ฐ์ฅ ๋ง์ ํฌ์๋ฅผ ํ๋ ํธ์ด์คํ ์ ๋ํด ์ ์ ์๊ฒ๋์ด ๋คํ์ด๋ผ๋ ์๊ฐ์ด ๋ค์๊ณ ํด๋ก์ ธ๋ ๋ถ๋์ด ๋ง์ ์ง ๊ฑฐ ๊ฐ์ ๋ด์ผ ์ ๋ฆฌ๋ฅผ ํ๋ฒ ํด๋ด์ผ๊ฒ ๋ค!!