Function
ํจ์ ์์ฑ ๋ฐ ํธ์ถ
ํจ์ ๋ฆฌํฐ๋ด ๋ฐฉ์์ ํจ์ ์ ์ธ
ํจ์ ์ ์ธ๋ฌธ ๋ฐฉ์์ ํจ์ ์ ์ธ
โํจ์ ํํ์ ๋ฐฉ์์ ํจ์ ์ ์ธ
์์ฑ์ ํจ์๋ฅผ ์ด์ฉํ ํจ์ ์์ฑ
ํจ์ ํธ์ถ
์ธ์
ํจ์ ์ ์ธ๋ฌธ๋ง ํธ์ด์คํ
๋ณ์ ์ ์ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํจ์ ์ ์ธ๋ฌธ์ ํ๋ก๊ทธ๋จ์ ์ฒซ๋จธ๋ฆฌ๋ก ๋์ด์ฌ๋ฆฐ๋ค
ํจ์ ์ ์ธ๋ฌธ์ ํจ์์ ์์น์ ์๊ด์์ด ์ ํจ ๋ฒ์๊ฐ ์ฝ๋์ ์ฒ์๋ถํฐ ์์
ํจ์ ํํ์์ ํธ์ด์คํ ๋์ง ์๋๋ค. ์ ์๋๊ธฐ ์ ์ ์ฌ์ฉ ํ ์ ์๋ค.
ํจ์ ํํ์์ ๊ถ์ฅ
ํจ์ ํน์ง
ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด์ด๋ค
ํจ์
square(x)
๋function(x) {return x*x;}
๋ฅผ ๊ฐ๋ฆฌํค๋ ์ผ์ข ์ ๊ฐ์ฒด๋ฆฌํฐ๋ด์ ์ํด ์์ฑ๋๋ ๊ฐ์ฒด
ํจ์๋ ๊ฐ์ด๋ค
๋ณ์, ๋ฐฐ์ด, ํ๋กํผํฐ ๋ฑ์ ํ ๋น ๊ฐ๋ฅํ๋ค
ํจ์์ ์ธ์๋ ๋ฆฌํด๊ฐ์ผ๋ก ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ค
๋์ ํ๋กํผํฐ ํ ๋น ๊ฐ๋ฅ
ํจ์๊ฐ ๊ฐ์ง๋ ๊ธฐ๋ณธ ํ๋กํผํฐ
length
: ํจ์๊ฐ ๊ธฐ๋ํ๋ ์ ์์ ์ธ ์ธ์์ ๊ฐ์prototype
: ๊ฐ์ฒด์ ๋ถ๋ชจ๋ฅผ ๊ฐ๋ฆฌํค๋ [[Prototype]]๊ณผ ๋ค๋ฆ.constructor
ํ๋กํผํฐ๋ฅผ ๊ฐ๋ฆฌํด.constructor
ํ๋กํผํฐ๋ ํจ์๋ฅผ ๊ฐ๋ฆฌํด.ํจ์(prototype
) โconstructor
๊ฐ์ ์ํ ํธ์ถ
๊ฐ์ ์ ๋ฌ: ์ธ์์ ์์ ๊ฐ(์ฌ๊ธฐ์๋ a = 3)์ ๋๊ธฐ๋ฉด ๊ทธ ๊ฐ ์์ฒด๊ฐ ์ธ์์ ์ ๋ฌ๋์ด a์ ๊ฐ์ ๋ณํ์ง ์๋๋ค
์ฐธ์กฐ์ ์ํ ํธ์ถ
์ฐธ์กฐ์ ๋ฌ: ์ธ์์ ๊ฐ์ฒด(์ฌ๊ธฐ์๋ a={x:3, y:4})๋ฅผ ๋๊ธฐ๋ฉด ์ฐธ์กฐ ๊ฐ์ p์ ๋์ ํ๋ฏ๋ก p๋ฅผ ์์ ํ๋ฉด a๊น์ง ์์ ๋๋ค
๋งค๊ฐ๋ณ์(parameter; ์ธ์)
ํจ์๋ฅผ ํธ์ถํ ๋ ์ ๋ฌํ๋ ๊ฐ๋ค
๋งค๊ฐ๋ณ์๋ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ์ฌ ๋งค๊ฐ๋ณ์๊ฐ ์์ ๋ ์๊ธฐ๋ ์์ธ์ ์ํฉ์ ํผํ ์ ์๋ค.
๋ณ์์ ์ ํจ ๋ฒ์(Scope)
์ดํ์ ๋ฒ์: ํ๋ก๊ทธ๋จ์ ๊ตฌ๋ฌธ์ผ๋ก ์ ํจ ๋ฒ์ ์ง์
๋์ ๋ฒ์: ํ๋ก๊ทธ๋จ ์คํ ์ค ์ ํจ ๋ฒ์ ์ง์
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ดํ์ ๋ฒ์ ๋ฐฉ์์ ์ฑํ
์ ์ญ ๋ณ์: ํจ์ ๋ฐ๊นฅ์์ ์ ์ธ๋ ๋ณ์. ์ ํจ ๋ฒ์๊ฐ ์ ์ฒด ํ๋ก๊ทธ๋จ
์ง์ญ ๋ณ์: ํจ์ ์์์ ์ ์ธ๋ ๋ณ์์ ํจ์ ์ธ์. ์ ํจ ๋ฒ์๊ฐ ๋ณ์๊ฐ ์ ์ธ๋ ํจ์ ๋ด๋ถ
์ง์ญ ๋ณ์์ ์ ํจ ๋ฒ์ ์์์๋ ๊ฐ์ ์ด๋ฆ์ ์ ์ญ ๋ณ์๋ ์จ๊ฒจ์ง๋ค
ํด๋ก์ (closer)
์ค์ฒฉ ํจ์๊ฐ ์ธ๋ถ ํจ์๋ณด๋ค ์ค๋ ์ ์ง๋๊ณ , ์ธ๋ถ ํจ์์ ๋ณ์๋ฅผ ์ฐธ์กฐํ๊ณ ์์ ๋, ์ธ๋ถ ํจ์๊ฐ ์ข ๋ฃ๋์ด๋ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅ
์ธ๋ถ ํจ์์ ๋ณ์๋ค์ ์์ ํ๊ฒ ๋ณดํธํ๊ณ ์ด๊ธฐํ์์ด ๋ด๋ถ ํจ์๋ฅผ ์ฌ์ฉ
ํจ์ ์์ ๋ณ์ ๋์ด์ฌ๋ฆผ
ํจ์ ์์ ๋ณ์ ์ ์ธ๋ถ๋ ํจ์์ ์ฒซ๋จธ๋ฆฌ๋ก ๋์ด์ฌ๋ ค์ง๋ค.
ํจ์ ์์์ ๋ณ์ ์ ์ธ ์๋ต์ ์ ์ญ ๋ณ์
ํจ์์์์ ๋ณ์๋ฅผ ์ ์ธํ์ง ์๊ณ ๊ฐ์ ๋์ ํ๋ฉด ์ ์ญ ๋ณ์๋ก ์ ์ธ๋๋ค.
๋ธ๋ก ์ ํจ ๋ฒ์
let๊ณผ const๋ ES6๋ถํฐ ์ถ๊ฐ๋ ๋ณ์ ์ ์ธ์๋ก '์ ์ธ๋ {...} ์'์ '๋ธ๋ก ์ ํจ ๋ฒ์'๋ฅผ ๊ฐ๋ ๋ณ์๋ฅผ ์ ์ธํ๋ค
let ์ ์ธ์: ๋ธ๋ก ์ ํจ ๋ฒ์๋ฅผ ๊ฐ๋ ์ง์ญ ๋ณ์ ์ ์ธ
๋ณ์ ๋์ด์ฌ๋ฆผ(ํธ์ด์คํ )์ด ๋์ง ์๋๋ค
const ์ ์ธ์: ๋ธ๋ก ์ ํจ ๋ฒ์๋ฅผ ๊ฐ์ง๋ฉด์ ํ ๋ฒ๋ง ํ ๋น ๊ฐ๋ฅํ ์์๋ฅผ ์ ์ธ
์์ ๊ฐ์ ์์ ๋ถ๊ฐ๋ฅ
์์ ๊ฐ์ด ๊ฐ์ฒด๋ ๋ฐฐ์ด์ผ ๊ฒฝ์ฐ ํ๋กํผํฐ ๋๋ ํ๋กํผํฐ ๊ฐ์ ์์ ๊ฐ๋ฅ
ํจ์ ๋ฆฌํฐ๋ด๋ก ํจ์ ์ ์ํ๊ธฐ
ํจ์ ๋ฆฌํฐ๋ด = ์ต๋ช ํจ์ = ๋ฌด๋ช ํจ์
๊ฐ์ฒด์ ๋ฉ์๋
๋ฉ์๋: ๊ฐ์ฒด์ ํ๋กํผํฐ ์ค ํจ์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ผ๋ก ๋ด๊ณ ์๋ ํ๋กํผํฐ
์ผ๋ฐ์ ์ผ๋ก ๋ฉ์๋๊ฐ ์ํ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ์ด์ฉํ๋ ์ฉ๋๋ก ์ฌ์ฉ
arguments ๊ฐ์ฒด
ํจ์๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ๋ ์ธ์๋ค์ด ๋ฐฐ์ด ํํ๋ก ์ ์ฅ๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด
this ๋ฐ์ธ๋ฉ
๊ฐ์ฒด ๋ด์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋๋ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ก ๋ฐ์ธ๋ฉ
์์ธ์ ์ผ๋ก ๊ฐ์ฒด์ ๋ฉ์๋์ฌ๋ ์ฆ์ ์คํ ํจ์์ผ ๊ฒฝ์ฐ ์ค์ค๋ก ์คํ๋๋ฏ๋ก ์ ์ญ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ๋๋ค.
๊ฐ์ฒด์ ๋ฉ์๋์ฌ๋ ํจ์์๊ฒ ์ธ์๋ก ๋๊ฒจ์ฃผ๋ฉด ์ ์ญ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ์ ์ ์ญ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ (window ๊ฐ์ฒด)
๋ฐ์ธ๋ฉ ํ์ง ์์ผ๋ฉด func2, func3์ this๋ ์ ์ญ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํด
call๊ณผ apply๋ฅผ ํตํ this ๋ฐ์ธ๋ฉ
thisArg: func()ํธ์ถ์ ์ฌ์ฉํ this
call๊ณผ apply ์ฐจ์ด: call์ ์ธ์๋ฅผ ๊ฐ๊ฐ ๋๊ธฐ๊ณ , apply๋ ๋ฐฐ์ด ํํ๋ก ๋๊ธด๋ค.
bind()๋ฅผ ํตํ ๋ฐ์ธ๋ฉ
this์ ์ด๊ธฐ ์ธ์๋ฅผ ๋ฐ์ ๋ฐ์ธ๋ฉ๋ ์๋ณธ ํจ์์ ๋ณต์ ๋ณธ์ ๋ฐํ
์ฌ์ฉ ์ฉ๋
๋ฏธ๋ฆฌ this ๋ฐ์ธ๋ฉ
๋ถ๋ถ ์ ์ฉ ํจ์ ์์ฑ
name ํ๋กํผํฐ๋ก bind()๋์๋์ง ํ์ธ
์์ฑ์ ํจ์ new
Person() ์์ฑ์ ํจ์์
prototype
-> Person.prototype ๊ฐ์ฒด์์ฑ๋ ๋น ๊ฐ์ฒด์
[[prototype]]
์ Person.prototype ๊ฐ์ฒด์ ์ฐ๊ฒฐ์์ฑ์ ํจ์ ํธ์ถ ์์๋ ์์ฑ๋๋ ๊ฐ์ฒด์ this๊ฐ ๋ฐ์ธ๋ฉ
๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์๊ณผ ์์ฑ์ ํจ์ ๋ฐฉ์ ์ฐจ์ด
๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์
๋ณ์ = {...}
์ Object.prototype์ ``proto`๋ก ๊ฐ์ง์์ฑ์ ํจ์ ๋ฐฉ์
๋ณ์ = new Person()
์ Person.prototype์ ``proto`๋ก ๊ฐ์ง
call๊ณผ apply๋ฅผ ํตํ this ๋ฐ์ธ๋ฉ
thisArg: func()ํธ์ถ์ ์ฌ์ฉํ this
call๊ณผ apply ์ฐจ์ด: call์ ์ธ์๋ฅผ ๊ฐ๊ฐ ๋๊ธฐ๊ณ , apply๋ ๋ฐฐ์ด ํํ๋ก ๋๊ธด๋ค.
... ์ฐ์ฐ์(๋๋จธ์ง ์ฐ์ฐ์)
ํจ์์์ ์ฌ๋ฌ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ๋, ์ ์ํ์ง ์๋ ํ๋ผ๋ฏธํฐ ๋๋จธ์ง ๋ถ๋ถ์ ํ๋์ ๋ฐฐ์ด๋ก ๋ฐ์ ์ ์๋ค.
ํ๋กํ ํ์
์ฒด์ด๋
ํด๋น ๊ฐ์ฒด์ ๋ฉ์๋๋ ํ๋กํผํฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด
[[Prototype]]
๋งํฌ๋ฅผ ๋ฐ๋ผ ์ฌ๋ผ๊ฐ๋ฉด์ ํ๋กํ ํ์ ๊ฐ์ฒด์์ ๊ฒ์
๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด์ ํ๋กํ ํ์
์ฒด์ด๋
hasOwnProperty()
๋ myObject์ prototype -> Object.prototype์ ๋ฉ์๋
์์ฑ์ ํจ์๋ก ์์ฑ๋ ๊ฐ์ฒด์ ํ๋กํ ํ์
์ฒด์ด๋
hasOwnProperty()
๋ Person()์ prototype -> Person.prototype -> Object.prototype์ ๋ฉ์๋
๋ค์ํ ํจ์์ ํํ
ํ์ดํ ํจ์
this, super ๋ฐ์ธ๋ฉ ์์
โ methods๋ก ์ฌ์ฉ ๋ถ๊ฐ
new.target ํค์๋ ์์
์ค์ฝํ ์ง์ ์ ์ฌ์ฉํ๋ call, apply, bind methods ๋ถ๊ฐ๋ฅ
์์ฑ์ ์ฌ์ฉ ๋ถ๊ฐ
yield๋ฅผ ํจ์ ๋ด๋ถ์์ ์ฌ์ฉ ๋ถ๊ฐ
๊ณ ์ฐจํจ์
ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฑฐ๋ ํจ์๋ฅผ ๊ฒฐ๊ณผ๋ก ๋ฆฌํดํ๋ ํจ์
์ฝ๋ฐฑ(callback) ํจ์
ํน์ ์กฐ๊ฑด, ์ด๋ฒคํธ ๋ฐ์ ์ ํธ์ถ๋๋ ํจ์ (์ด๋ฒคํธ๋ฆฌ์ค๋)
ํจ์์ ์ธ์๋ก ๋๊ฒจ์ ธ ์ฝ๋ ๋ด๋ถ์์ ํธ์ถ๋๋ ํจ์
์ฝ๋ฐฑํจ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํจ์์ด๋ฏ๋ก
this
๋ฐ์ธ๋ฉ์ด ์์ง๋ง addEventListener ๊ฐ์ ๊ฒฝ์ฐ๋this
๋ฐ์ธ๋ฉ์ด ๋์ด ์๋ค. -> ํจ์ ๋ด๋ถ์์ ๋ช ์์ ์ผ๋กthis
๋ฐ์ธ๋ฉ์ ํ๊ธฐ ๋๋ฌธ์ฝ๋ฐฑํจ์๋ฅผ ์ฌ์ฉํ๋ ํจ์
eventlistener() ์ด๋ฒคํธ ๋ฆฌ์ค๋
setInterval() ํ์ด๋จธ ํจ์
forEach(), map(), reduce ๋ฑ ๋ฐฐ์ด ํจ์
์ฝ๋ฐฑ ํจ์ ํน์ง
ํธ์ถ ์์ ์ ๋ํ ์ ์ด๊ถ์ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฐ๋ ํจ์์๊ฒ ์๋ค.
์ธ์์ ๊ทธ ์์์ ๋ํ ์ ์ด๊ถ๋ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฐ๋ ํจ์์๊ฒ ์๋ค.
setTimeout()
ํ์ด๋จธ๊ฐ ๋ง๋ฃ๋๋ฉด ์ฃผ์ด์ง ํจ์๋ ์ฝ๋๋ฅผ ์คํ
์คํ์ ์ฃผ์ฒด๊ฐ ๋์ด ํจ์ ์คํ์ ์ ์ด๊ถ์ ๊ฐ์ง
clearTimeout()
์ ํตํด ํ์ด๋จธ ์ทจ์
ํจ์๋ฅผ ๋ฆฌํดํ๋ ํจ์
ํจ์ ๋ฆฌํด๊ฐ
๋ฆฌํด ๊ฐ ๋ฏธ์ง์ ์: ์ผ๋ฐ ํจ์, ๋ฉ์๋ -> undefined
๋ฆฌํด ๊ฐ ๋ฏธ์ง์ ์: ์์ฑ์ ํจ์ -> ์์ฑ๋ ๊ฐ์ฒด
์ฆ์ ์คํ ํจ์ ํํ (IIFE)
์ ์์ ๋์์ ์ฆ์ ์คํ๋๋ ํจ์
๋ด๋ถ ํจ์
ํจ์ ๋ด๋ถ์์ ํจ์๋ฅผ ์ ์
๋ณ์๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ์์ ์ ๋ถ๋ชจ ํจ์์ ๋ณ์์ ์ ๊ทผ
๋ด๋ถ ํจ์๋ ๋ถ๋ชจ ํจ์ ๋ด์์๋ง ํธ์ถ ๊ฐ๋ฅ
ํจ์ ์ธ๋ถ์์ ๋ด๋ถ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ
inner() ์คํ
func_child() ํธ์ถ
console.log(a, b);
a๋ ์ ์๋์ด ์์ง ์์ ๋ถ๋ชจ ํจ์์ ์๋์ง ํ์ธํ์ฌ ์์ผ๋ฉด ์ฌ์ฉ (ํด๋ก์ ) b๋ ์ ์๋์ด ์์
1,3 ์ถ๋ ฅ
Last updated