function
es3, 5
es6
Basic
์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๋ ๋ค๋ฅธ ๊ฐ์ฒด์ฒ๋ผ ์์ฑ(property) ๋ฐ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋ ์ผ๊ธ ๊ฐ์ฒด๋ค. ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ตฌ๋ณ๋๋ ์ ์ ํจ์๋ ํธ์ถ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค. (ํจ์๋ Function ๊ฐ์ฒด๋ค.)
ํจ์๋ 2๊ฐ์ง ๋ฐฉ์์ผ๋ก ํธ์ถ๋๋ค. new๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถ ๋๋ new ์์ด ํธ์ถํ ์ ์๋ค. new ํค์๋๋ก ํธ์ถ๋๋ ์์ฑ์์ ๊ฒฝ์ฐ, return๋๋ ๊ธฐ๋ณธ๊ฐ(๊ธฐ๋ณธ ๊ฐ์ด๋ return๋ฌธ์ ์์ฑํ์ง ์์ ๊ฒฝ์ฐ)์ ์์ ์ this ๋งค๊ฐ๋ณ์ ๊ฐ์ด๋ค. new ์์ด ํธ์ถ๋๋ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ ๋ฐํ ๊ฐ์ undefined๋ค.
์ผ๋จ, ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๊ฐ ์์ฑ๋๋ 3๊ฐ์ง ๋ฐฉ์์ ์์๋ณด์.
ํจ์ ์ ์ธ์
ํจ์ ํํ์
Function() ์์ฑ์ ํจ์
ํจ์ ์ ์
1. ํจ์ ์ ์ธ์โฉโฉ
JS์์ ํจ์๋ ์ผ๋ฐ ๊ฐ์ฒด ์ฒ๋ผ ๊ฐ์ผ๋ก ์ทจ๊ธ๋๋ค. ๋๋ฌธ์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ๋ฐฉ์์ผ๋ก ์ผ๋ฐ ๊ฐ์ฒด ์์ฑํ๋ ๊ฒ์ฒ๋ผ ํจ์ ๋ฆฌํฐ๋ด์ ์ด์ฉํด ํจ์๋ฅผ ์์ฑํ ์ ์๋ค.
function add(x, y){
return x + y;
}2. ํจ์ ํํ์
JS์์ ํจ์๋ ํ๋์ ๊ฐ์ด๋ค. (ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด๋ค) ๋ฐ๋ผ์ ํจ์๋ ์ซ์๋ ๋ฌธ์์ด์ฒ๋ผ ๋ณ์์ ํ ๋นํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
ํจ์ ๋ณ์ add๋ ํจ์์ ์ฐธ์กฐ๊ฐ์ ๊ฐ์ง๋ค. ๊ทธ๋์ plus ๋ณ์์๋ ๊ทธ ๊ฐ์ ํ ๋นํ ์ ์๋ค.
C์ ํฌ์ธํฐ์ฒ๋ผ add์ plus๋ ๋์ผํ ์ต๋ช ํจ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
3. Function() ์์ฑ์ ํจ์๋ฅผ ํตํ ํจ์ ์์ฑํ๊ธฐ
JS์ ํจ์๋ Function()์ด๋ผ๋ ๊ธฐ๋ณธ ๋ด์ฅ ์์ฑ์ ํจ์๋ก๋ถํฐ ์์ฑ๋ ๊ฐ์ฒด๋ค. ํจ์ ์ ์ธ๋ฌธ, ํจ์ ํํ์์ Function() ์์ฑ์๊ฐ ์๋ ํจ์ ๋ฆฌํฐ๋ด ๋ฐฉ์์ผ๋ก ํจ์๋ฅผ ์์ฑํ๋ค. ํ์ง๋ง ๊ฒฐ๊ตญ์ Function() ์์ฑ์ ํจ์๋ก ํจ์๊ฐ ์์ฑ๋๋ค๊ณ ๋ณผ ์ ์๋ค.
์์ ์์ ๋ฅผ Function() ์์ฑ์๋ฅผ ์ด์ฉํ์ฌ add ํจ์๋ฅผ ์์ฑ ํด๋ณด์
ํจ์ ํธ์ด์คํ
๋๊ธ๋ผ์ค ํฌ๋ฝํฌ๋์ JS good parts์์ ํจ์ ํํ์๋ง์ ์ฌ์ฉํ ๊ฒ์ ๊ถํ๊ณ ์๋ค. ๊ทธ ์ด์ ์ค ํ๋๊ฐ ํจ์ ํธ์ด์คํ ๋๋ฌธ์ด๋ค.1๋ฒ ๋ผ์ธ์์ add() ํจ์๊ฐ ์ ์๋์ง ์์์์๋ add ํจ์๋ฅผ ํธ์ถ ํ ์ ์๋ค. ํจ์๊ฐ ์์ ์ ์์น์ ์๊ด ์์ด ํจ์ ์ ์ธ๋ฌธ ํํ๋ก ์ ์ํ ํจ์์ ์ ํจ ๋ฒ์๋ ์ฝ๋์ ๋งจ ์ฒ์๋ถํฐ ์์ํ๋ค. ์ด๊ฒ์ด ํจ์ ํธ์ด์คํ ์ด๋ค. ๋๊ธ๋ฝ์ค ํฌ๋ฝํฌ๋๋ ํจ์ ์ฌ์ฉ ์ ์ ๋ฐ๋์ ํจ์ ์ ์ธํด์ผ ํ๋ ๊ท์น์ ๋ฌด์ํ๋ฏ๋ก ๊ตฌ์กฐ๋ฅผ ์์ฑํ๊ฒ ๋ง๋ ๋ค๊ณ ์ง์ ํ๋ฉฐ,
ํจ์ ํํ์์ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๋ค.
ํจ์๋ ๊ฐ์ฒด๋ค.
์ผ๋ฐ ๊ฐ์ฒด์ฒ๋ผ
property๋ค์ ๊ฐ์ง ์ ์๋ค.
ํจ์๋ ๊ฐ์ผ๋ก ์ทจ๊ธ๋๋ค.
๋ค์ ๋งํ์๋ฉด, ํจ์๋ ์ผ๋ฐ ๊ฐ์ฒด์ฒ๋ผ ์ทจ๊ธ๋ ์ ์๋ค.
๋ฆฌํฐ๋ด์ ์ํด ์์ฑ
๋ณ์๋ ๋ฐฐ์ด์ ์์, ๊ฐ์ฒด์ ํ๋กํผํฐ ๋ฑ์ ํ ๋น ๊ฐ๋ฅ
ํจ์์ ์ธ์๋ก ์ ๋ฌ ๊ฐ๋ฅ
ํจ์์ ๋ฆฌํด๊ฐ์ผ๋ก ๋ฆฌํด ๊ฐ๋ฅ
๋์ ์ผ๋ก ํ๋กํผํฐ๋ฅผ ์์ฑ ๋ฐ ํ ๋น ๊ฐ๋ฅ
์ด์ ๊ฐ์ ํน์ง ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์๋ ์ผ๊ธ ๊ฐ์ฒด(First Class)๋ค. ์ผ๊ธ ๊ฐ์ฒด๋ผ๋ ๋ง์ ์์์ ๋์ดํ ๊ธฐ๋ฅ์ด ๋ชจ๋ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ์ผ๊ธ ๊ฐ์ฒด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด ๋๋ฌธ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋ค.
this
์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์ ํธ์ถ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋๋ ์ธ์๊ฐ, arguments ๊ฐ์ฒด ๋ฐ this ์ธ์๊ฐ ํจ์ ๋ด๋ถ๋ก ์๋ฌต์ ์ผ๋ก ์ ๋ฌ๋๋ค. this๋ ํจ์๊ฐ ํธ์ถใน๋๋ ๋ฐฉ์์ ๋ฐ๋ผ this๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ(this ๋ฐ์ธ๋ฉ)ํ๋ค.
1. ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถํ ๋ this ๋ฐ์ธ๋ฉ
sayHello() ๋ฉ์๋์์ this.name ๊ฐ์ ์ถ๋ ฅํ๋ ๊ฐ๋จํ ํจ์๋ค. myObj, otherObj๊ฐ์ฒด๋ก๋ถํฐ ๊ฐ๊ฐ ํธ์ถ ๋๋ค. sayName์์ this๋ ์์ ์ ํธ์ถํ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ ๋๋ค.
2. ํจ์ ํธ์ถ์ this ๋ฐ์ธ๋ฉ
์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์ ํธ์ถ์, ํด๋น ํจ์ ๋ด๋ถ ์ฝ๋์์ ์ฌ์ฉ๋ this๋ ์ ์ญ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์์๋ ์ ์ญ ๊ฐ์ฒด window์ ๋ฐ์ธ๋ฉ๋๋ค.
์ ์ญ๋ณ์ name์ ์ ์ํ๊ณ ์ถ๋ ฅํ๋ ์ฝ๋๋ค. ์ด์ ํจ์ ํธ์ถ์ this ๋ฐ์ธ๋ฉ์ด ์ด๋ป๊ฒ ๋๋์ง๋ฅผ ๋ณด์.
ํจ์ ํธ์ถ์์์ this ๋ฐ์ธ๋ฉ ํน์ฑ์ ๋ด๋ถ ํจ์์ ํธ์ถํ์ ๊ฒฝ์ฐ์๋ ๊ทธ๋๋ก ์ ์ฉ๋๋ค.
ES6
generator ํจ์
function* ์ ์ธ์ generator function์ ์ ์ํ๋ค. ์ด ํจ์๋ Generator ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. ์ ์ฝ๋์์ ๊ธฐ์กด์ ํจ์์ ์ ๋๋ ์ดํฐ ํจ์์์ ๋ค๋ฅธ ์ ์ 2๊ฐ์ง ์ ๋ ๋ฐ๊ฒฌํ ์ ์๋ค.
function*ํค์๋yield๊ตฌ๋ฌธ์ด ์กด์ฌํ๋ค. return๊ณผ ๋น์ทํ๋ค. ์ฐจ์ด์ ์ ํจ์์์ return์ ๋จ ํ ๋ฒ ์คํ๋๋ค. ํ์ง๋ง, ์ ๋๋ ์ดํฐ ํจ์์ yield๋ ์ฌ๋ฌ๋ฒ ์คํ๋๋ค.yield๋ ์ ๋๋ ์ดํฐ์ ์คํ์ ๋ฉ์ท๋ค๊ฐ ๋ค์์ ๋ค์ ์์ํ ์ ์๊ฒ ๋ง๋ ๋ค.
์ด์ ์คํํด๋ณด์.
์ผ๋ฐ์ ์ธ ํจ์์ ๋์ ๋ฐฉ์์ ํธ์ถํ๋ฉด ๋ฐ๋ก ์คํ๋๋ค. ๊ทธ๋์ return ๋ฌธ์ ๋ง๋๊ฑฐ๋ ์์ธ(exception) ๋ฐ์ํ ๋๊น์ง ์คํ๋๋ค. ์ ์ฝ๋์์ sayHello('hoil')์ ์ผ๋ฐ ํจ์๋ฅผ ํธ์ถํ๋ ์ฝ๋ ๊ฐ์ ๋ณด์ธ๋ค. ํ์ง๋ง ์ ๋๋ ์ดํฐ ํจ์๋ ํธ์ถ์ ์ฆ์ ์๋ณใ
๋์ง ์๋๋ค. ๊ทธ ๋์ generator ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค. (iteratorObj ๋ณ์) ์ด ์ ๋๋ ์ดํฐ๋ ์คํ์ด ์ผ์ด๋ถ์ ํจ์๋ผ๊ณ ํํํ ์ ์๋ค. ์ฒซ๋ฒ์งธ ์ค ๋ฐ๋ก ์์์ ์คํ์ด ์ผ์ด๋ถ์ ํจ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ ๋๋ ์ดํฐ ๊ฐ์ฒด์ .next()๋ฉ์๋ ํธ์ถ์ ์ค์ค๋ก ํด๋๋์ด ๋ค์ yield๊น์ง ์คํ๋๋ค. ๊ทธ๋์ iteratorObj.next() ๋ง๋ค ๋ค๋ฅธ ๋ฌธ์์ด ๊ฐ์ ์ป์ ์ ์์๋ค.
.next()์ ํธ์ถ์์, ๋ง์ง๋ง์ ๋๋ฌ์ done ํ๋กํผํฐ๊ฐ true๊ฐ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋์ value๋ undefined๋ค.
Arrow Function
์์ ์ this, arguments, super ๋๋ new.target์ ๋ฐ์ธ๋ฉ ํ์ง ์๋๋ค. ํ์ดํ ํจ์๋ ํญ์ ์ต๋ช ์ด๋ค. ์ด ํจ์ ํํ์ ๋ฉ์๋ ํจ์๊ฐ ์๋ ๊ณณ์ ์ ๋นํ๋ค. ๊ทธ๋์ ์์ฑ์๋ก์จ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ์ธ๋ฉ ๋์ง ์๋ this
ํ์ดํ ํจ์ ๋์ค๊ธฐ ์ ๊น์ง, ๋ชจ๋ ํจ์๋ ์์ ์ this ๊ฐ์ ์ ์ํ๋ค. OOP ์คํ์ผ ํ๋ก๊ทธ๋๋ฐ์์ ๊ท์ฐฎ์ ์์
์ด ํญ์ ํ์ํ๋ค.
this๋ ์์ฑ์ ํจ์์ ๊ฒฝ์ฐ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
strict mode์์ ํจ์ ํธ์ถ์undefined, ํจ์๊ฐ ๊ฐ์ฒด ๋ฉ์๋๋ก์จ ํธ์ถ๋ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด this๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์๋ฅผ ์ ์ธํ๋ค.
ํ์ง๋ง ์์ ๊ฐ์ด ํ๋ ๋์ ์, ๋ฐ์ธ๋ฉํ ํจ์๋ ์ ์ ํ this ๊ฐ์ด sayName() ํจ์์ ์ ๋ฌ๋ ์ ์๋๋ก ํ ์ ์๋ค. ํ์ดํ ํจ์๋ ์์ ๋ง์ this๋ฅผ ์์ฑํ์ง ์๋๋ค. this๋ ์์ ์ ๊ฐ์ธ๊ณ ์๋ ์ปจํ
์คํธ์ ์๋ฏธ๋ฅผ ๊ฐ๋๋ค. ์ฆ, this๋ ๋ ์์ปฌ ์ปจํ
์คํธ๋ฅผ ๊ฐ์ง๋ค.
๋ฐ์ธ๋ฉ ๋์ง ์์ arguments
arguments ๊ฐ์ฒด๋ฅผ ๋ฐ์ธ๋ฉ ํ์ง ์๊ธฐ ๋๋ฌธ์, ๋จ์ํ scope๋ด ์ด๋ฆ์ ๋ํ ์ฐธ์กฐ๋ค.
๋ฉ์๋๋ก ์ฌ์ฉ๋๋ ํ์ดํ ํจ์
์๋ธ๋ฃจํด(๋ฉ์๋๊ฐ ์๋ ํจ์),
ํจ์๋ ํธ์ถ๋ ๋๋ง๋ค 2๊ฐ์ง scope๋ฅผ ๊ฐ์ง๋ค. ์ฌ๊ธฐ์ lexiocal scope๋ ์ฝ๋๋ฅผ ๋๋ฌ์ธ๊ณ ์๋ ๊ตฌ๋ฌธ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์ฆ, ์ฝ๋๊ฐ ์์ฑ๋ ๊ทธ ๋ฌธ๋งฅ์์ ๊ฒฐ์ ๋๋ค๋ ๋ง์ด๋ค. dynamic scope๋ ๋ฐํ์ ๋์ค ์คํ ์ปจํ ์คํธ๋ ํธ์ถ ์ปจํ ์คํธ์ ์ํด ๊ฒฐ์ ๋๋ค.
Last updated
Was this helpful?