ํจ์๊ฐ ๋๋์ด ๋์ค๋ค์.
์ฌ์ค ํจ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฟ๋ง ์๋๋ผ ๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ค์์ ๋ค๋ค์ง๋ ๊ฐ๋
์ด์ฃ .
์ฌ์ค ๋ฐฉ๋ํ ์์ด์ง๋ง, ํจ์๋ผ๋ ๋ง์ ๋๋ฌด ์ด๋ ต๊ฒ ๋ฐ์๋ค์ด์ง ๋ง๊ณ , ์ฐ๋ฆฌ๊ฐ ์์ ๋ถํฐ ์๊ณ ์์๋ค๋ ๋ฏ์ด, ๊ฐ๋ฒผ์ด ํธํก์ผ๋ก ๋ณด์๋ ๊ฒ์ ์ถ์ฒ๋๋ ค์.
"๊ทธ๋ ๊ฒ ํธํ ๊ฐ๋ค ๋ณด๋ฉด, ์๊ฐ๊ณผ ๋ฌ๋ฆฌ ํจ์์ ๋น์ทํ ์ฌ๊ณ ๋ฅผ ์์ ๋ถํฐ ํ๊ณ ์๋ ์์ ์ ์กฐ์ฐํ ์๋ ์์ด์. ๊ทธ๋ผ ์์ํด๋ณผ๊น์!" ๐
์ฐ๋ฆฌ ์ธํ, ์์ํ์ด๋ผ๋ ๋ง, ๋ง์ด ์ฐ์ฃ ?
ํ๋ก๊ทธ๋๋ฐ์ ์ฐธ ์ข์์. ์ธํ์ ํฌ์
ํ์ ๋, ์์ํ์ ๋ํ ๊ธฐ๋๊ฐ์ ๋ค๋ฅธ ์ธ๋ฌธํ๊ณผ ๋ฌ๋ฆฌ ์ด๋ ์ ๋ ๋น์ทํ๊ฒ ์ฐ์ถํ ์ ์๊ฑฐ๋ ์. ์ ๊ฐ ๊ฐ๋ฐ์ ๋ฐํ ์ด์ ์ด๊ธฐ๋ ํฉ๋๋ค.
์, ์ก์๋ฆฌ๊ฐ ๊ธธ์๊ตฐ์.
์ด๋ฐ ๋ง์ ์ ํ๋๋ฉด, ํจ์๊ฐ ๋ฐ๋ก ๊ทธ๋ฐ ์ญํ ์ ํด์ค๋๋ค.
์. ์์๋ก ์ ๊น, ํ๊ต์ ๊ฐ๋ ์ด๋ค ๊ผฌ๋ง์ ์ด์ผ๊ธฐ๋ฅผ ๋ค์ด๋ณผ๊น์?
๐๐ปโโ๏ธ: ์ ๊ฐ ์ค๋ ๋๋ฌด ํผ๊ณคํด์ ๊ณต๋ถ ๋์ ์ผ์ฐ ์์ผํ ๊ฒ ๊ฐ์๋ฐ, ํน์ ์ ๊ฐ ๋ด์ผ 7์๊น์ง ํ๊ต์ ๊ฐ๋ ค๋ฉด ๋ช ์์ ์๋ ๋ ๊น์?
์ด์ฐ ๋ณด๋ฉด ๊ทธ๋ฅ ์ผ์ ์ ์ด์ผ๊ธฐ์ง๋ง, ์ฌ์ค ์ด๊ฒ ์ญ์ ์ธํ๊ณผ ์์ํ์ผ๋ก ์ด๋ฃจ์ด์ง ํจ์๋ก ํ์ดํ ์ ์์ด์.
ํ ๋ฒ, ์ด ์น๊ตฌ๊ฐ ์ธ์ ์์ผ ํ๋์ง๋ฅผ ํจ์๋ก ๋ง๋ค์ด๋ณผ๊น์?
function getSleepAt(arriveAt) {
const fallingSleepTime = 6;
const readyTime = 0.5;
const goSchoolTakenTime = 0.25;
const result = arriveAt - sleepTime - readyTime - goSchoolTakenTime;
return result > 0 ? result : 24 + result;
}
console.log(getSleepAt(7) // 0.25 - 00์ 15๋ถ์ด๊ตฐ!
์ฝ๊ฐ ์ดํด๊ฐ ๋์๋์?
๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ๊ผฌ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ผ๋ จ์ ์ธํ๊ณผ ์์ํ์ ์ฐ์ ํ ๊ฑฐ์์.
๋ฐ๋ผ์ ์ฐ๋ฆฌ, ๋๋ฌด ์ด๋ ต๊ฒ ์๊ฐํ์ง ๋ง์๊ตฌ์.
์ฐ๋ฆฌ๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ๋ค์ ์ปดํจํ
์ฌ๊ณ ๋ก ์ผ๋ชฉ์์ฐํ๊ฒ ํ๋์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ํ ๊ฒ! ๊ทธ๊ฒ์ด ํจ์๋ผ ํ ์ ์๊ฒ ์ด์. ๊ฝค๋ ์ฌ๋ฐ์ง ์๋์? ๐
์ด๋ ๊ฒ ํจ์๋ก ๊ตฌํํ๋ฉด ์ ์ฉํ ๊ฒ์ ๋ฌด์์ผ๊น์?
๊ทธ๋๋ ์ฐ๋ฆฌ๋ ์ข ๋ ์ ๋๋ก ์ ๋ฆฌํ๊ณ ์ดํดํ ํ์๊ฐ ์๊ฒ ์ฃ ? ์ ๋ ํจ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ๋ฆฌํ ๊ฒ ๊ฐ์์.
์ ๋ฆฌ:
1. ํจ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์ ๋ธ๋ก({}
)์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ํ๋ ๋ก์ง์ด๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด๋ด๋ ๋ฌธ(statement)์ด๋ค!
2. ์ ์ฌ์ ์์ ์ฌ์ฉํ ํจ์๋ ๊ฐ๋ ์ฑ, ์ฌ์ฌ์ฉ์ฑ, ์์ ์ฑ์ ๋์ผ ์ ์๋ค!
์ฝ๊ฒ ๋งํ์๋ฉด ํจ์๋ฅผ ์์ฑํ ๋์ ๊ทธ ๋ชจ์! ๊ทธ๊ฑฐ์์.
function add(x, y) { return x + y; } // ์ ์
add(1 + 2) // ํธ์ถ
์ด๊ฒ ํจ์ ์ ์์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ํจ์ ํธ์ถ์ด๋ผ๊ณ ํด์.
๋ญ๊ฐ ๋ชจํธํ์ฃ ? ๊ทธ๋ฅ ์ ๋ง ์ฝ๊ฒ ์ค๋ช
ํ์๋ฉด, ๋ค์ 4๊ฐ์ง๊ฐ ํจ์ ์ ์๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ผ์.
๋ ์ฑ ์์ ๋ณด๋, '๋ณ์์์์ ์ ์ธ'์ด ๊ณง 'ํจ์์์๋ ์ ์'๋ก ํํ๋๋ค๊ณ ํ๋ค์! ๐๐ปโโ๏ธ
๋น์ฐํ ๋ง์ด์ง๋ง, ์ ์ธ์ผ๋ก ๋์์ ๋์๋ ์ด๋ฆ์ ์๋ตํ ์ ์์ด์.
function () {
} // Uncaught SyntaxError: Function statements require a function name
๐ฅ ์ด๋ผ? ๊ทธ๋ฐ๋ฐ, ์ ๋ ๊ฒ ํจ์ ์ด๋ฆ ์ ์ฐ๋ ๊ฑฐ, ๋ช ๋ฒ ๋ณด์๋๋ฐ์?
๋ง์์. ๋ค์๊ณผ ๊ฐ์ด, ๊ฐ์ผ๋ก ํ ๋นํด์ค๋ค๋ฉด ๊ฐ๋ฅํด์! ์ด๋ฅผ ํจ์ ํํ์์ด๋ผ๊ณ ํฉ๋๋ค.
ํจ์๋ ํน์ดํ๊ฒ ๋ฌธ๋ ๋์ง๋ง, ํํ์์ผ๋ก๋ ๊ฐ๋ฅํ ์น๊ตฌ์์! ๐ฎ
var b = function() {};
b(); // undefined
์ด๋ฐ ์ด๋ฆ์ด ์๋ ์น๊ตฌ๋ฅผ ์ต๋ช
ํจ์๋ผ๊ณ ํด์.
์ฌ์ค ํํ์์ผ๋ก ๊ฐ๋ฉด, ์ด๋ฆ์ด ์์ด๋ ๋ฉ๋๋ค.
์ด์ ๋, ์ฑ
์ ๋ฐ๋ฅด๋ฉด ํจ์ ์ด๋ฆ์ ์ ๋น์ด ํจ์ ๋ชธ์ฒด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด์์.
์ด๋ฅผ ๋ฏฟ์ง ๋ชปํ๊ฒ ๋ค๋ฉด, ๋ค์์ ํด๋ณด์์ฃ !
(function c() {});
c(); // Uncaught ReferenceError: c is not defined
์ด๋ ๋ค์๊ณผ ๊ฐ์ ๋ก์ง์ผ๋ก ํ๋ฌ๊ฐ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ฌ๊ธฐ์ ๋์ค๋ ๊ฒ ๋ ๊ธฐ๋ณธ๊ธฐ์ฃ !
์ฐ๋ฆฌ๋ ์ ์ธ ๋ฐ ์ด๊ธฐํ(ํ๊ฐ ๋จ๊ณ) - ์ดํ ์คํ์ ํ๋ค๋ ๊ฒ์ ์ด์ ์ ํ์ธํ์ฃ ? ๐
์ด๋ฏธ ๋ฆฌํฐ๋ด์ฒ๋ผ ๊ฐ์ผ๋ก ๋ฌถ์ด์ ๋์ด๊ฐ ๋จ๊ณ์์๋ ์ดํ ์คํ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ค์ผ ํด์.
๋ฐ๋ฉด ๋๋จธ์ง ์คํ ๊ตฌ๋ฌธ๋ค์ (์์ ๋ก์ง์์์ c()
) ์์ง ์ปดํ์ผ ๋จ๊ณ์์ ์๋ณ์๋ฅผ ์ฐพ๋๋ผ ํ์ฐ์ ๋๊ณ ์์ด์. ๐ญ ๋ฐ๋ผ์ ์ปดํ์ผ ๋จ๊ณ์์ ์ฐธ์กฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ๋๋ค!
๋ฐ๋ผ์ ํจ์ ์ด๋ฆ์ ์๋ณ์๋ผ๊ธฐ ๋ณด๋ค๋, ๋ชธ์ฒด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ์๋ณ์๋ผ๊ณ ํ ์ ์๊ฒ ๋ค์.
๋์ , ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํจ์ ์ ์ธ๋ฌธ ๋๋ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก, ํจ์ ์ด๋ฆ๊ณผ ๊ฐ์ ์ด๋ฆ์ ์๋ณ์๋ฅผ ์์ฑํ์ฌ ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ค๊ณ ํ๋ค์! ๐ฎ
์ด๋ฆ์ด ์ด๋ ค์์ ๊ทธ๋ฐ๋ฐ, ๋ง์ ๋ด์ฉ์ ๊น๋ณด๋ฉด ์ฝ์ต๋๋ค.
ํจ์๋ ๊ฐ์ฒด๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๋ฆฌํฐ๋ด๋ก๋ ํํํ ์ ์์ฃ . ๊ทธ๋ฆฌ๊ณ ๋ฆฌํฐ๋ด์ ๋ณ์์ ํ ๋น ๊ฐ๋ฅํ '๊ฐ'์
๋๋ค.
๋ฐ๋ผ์ ํจ์๋ '๊ฐ'์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด์์. ์ด๋ฌํ ๊ฒ์ '์ผ๊ธ ๊ฐ์ฒด'๋ผ๊ณ ํ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ ํจ์์ ํน์ฑ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค์.
์ด ์ผ๊ธ ๊ฐ์ฒด์ ํน์ฑ์ธ '๊ฐ'! ๊ผญ ๊ธฐ์ตํด์ฃผ์ธ์. ์์ผ๋ก ํด๋ก์ ๋ฑ์ ์ดํดํ๋ ๋ฐ ๋์ต๋๋ค!
์ด๊ฑฐ... ๊ธธ๊ฒ ์ค๋ช ๋์ด์ ธ ์๋๋ฐ, ๊ทธ๋ฅ ์ ์๊ฐํ๋ฉด ์ฌ์์. ๊ณ์ ๊ฐ์ ๋ง์ ๋๋ค.
ํจ์ ํํ์ = ๋ณ์์ ํจ์ ๋ฆฌํฐ๋ด์ด ํ ๋น๋ ๋ฌธ์ด์ฃ ?
๊ทธ๋ ๋ค๋ฉด, ํจ์๋ ์ด๋ฏธ ๊ฐ์ผ๋ก ํํ๋์๊ณ , ๋ณ์๋ ๋จผ์ ์ ์ธ์ด ๋ ์ํ์์.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์คํํ ์์ ์์ ์์ ๋ง์ถฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฃ . ๊ทธ์ ํจ์ ๊ฐ์ฒด๋ผ๋ '๊ฐ'์ด๋ผ๋ ์ํ๋ก ์กด์ฌํ๋ ๊ฒ๋๋ค.
๋ฐ๋ผ์ ํจ์ ํํ์์์๋ ๋ณ์ ํธ์ด์คํ ๋ง ์ผ์ด๋ฉ๋๋ค! ์ฝ์ฃ ? ๐ฅฐ
Function
์ ์ค์ ๋ก ์กฐ์ํ ์ผ์ด ์์ ๊ฒ ๊ฐ์์. ์ผ๋ฐ์ ์ผ๋ก ์์ฑํ ํจ์์ ๋ค๋ฅด๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ด์ฃ . (์ธ๋ถ ๋ ์์ปฌ ํ๊ฒฝ์์์ ์๋ณ์ ์ฐธ์กฐ ๋ถ๊ฐ)
์ฐ๋ฆฌ๊ฐ ์ข ๋ ์ดํด์ผ ํ ๊ฒ์ ํ์ดํ ํจ์์์.
var a = () => {};
์ด ์น๊ตฌ๋ ์ข ํน์ดํ๋ฐ์.
this
๋ก ์ธํ ๋์ ์ค์ฝํ์ ๋ํ์ฅ ํํฐ๋ฅผ ์ด๋ ์ ๋ ์ํ์ํจ ์น๊ตฌ์์. ์๋ง this
๋ฅผ ์ด์ผ๊ธฐํ ๋ ๋ณผ ๊ฒ ๊ฐ์ผ๋, ๋์ค์ ์ดํด๋ณด์ฃ !
์, ๋งค๊ฐ๋ณ์๊ฐ ์ค์ํ๊ฒ ๋ค์.
๋งค๊ฐ๋ณ์๋ ์คํ ๋จ๊ณ์์ ํจ์๊ฐ ํธ์ถ๋์์ ๋ ์๋ฌต์ ์ผ๋ก ์์ฑ๋๋ ์น๊ตฌ๋ค์ด์์. ๋ฐ๋ผ์ ๋จผ์ ์ ์ธ - ์ด๊ธฐํ์ ํ๊ฐ๋จ๊ณ๋ฅผ ๊ฑฐ์น ํ, ์ธ์๊ฐ ํ ๋น๋๋ ๋ฐฉ์์ผ๋ก ์ ๊ฐ๋ฉ๋๋ค.
๋ฐ๋ผ์ ๋ง์ฝ ๊ฐ์ด ํ ๋น๋์ง ์์๋ค๋ฉด, ๊ฐ์ undefined
์
๋๋ค.
function a(b) {
console.log('b: ', b);
}
a(); // b: undefined
๊ทธ๋ ๋ค๋ฉด, ๋ง์ฝ ๋ ๋ง์ด ์ธ์๋ฅผ ๋ฃ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
์ฌ์ค ์ผ๋ฐ์ ์ธ ๋ก์ง ์์์๋ ๋งค๊ฐ๋ณ์์ ํ ๋นํ ์ ์๋ ๋งํผ๋ง ๋ค๋ค์ง๋๋ฐ์.
๋ค๋ง arguments
๊ฐ์ฒด์ ๋ณด๊ด์ด ๋๊ธฐ๋ ํด์.
์ฐธ๊ณ ๋ก ์ด ๊ฐ์ฒด๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด์ ๋๋ค!
function a(b) {
console.log(arguments.map(a => a));
}
a(1,2,3,4,23) // arguments.map is not a function
์, ์์ ์ ๊ธ๋ก ๋จ๊ฒผ๋ ํ์
๊ฐ๋๊ฐ ์ฌ๊ธฐ์ ์ฐ์ฌ์ง๋๊ตฐ์!
์์ ์ ์ธ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ค์ํ ์ต๊ด์
๋๋ค. ๐
์ฑ
์ ๋์จ๋๋ก, ์ต๋ ๊ฐ์๋ ์กด์ฌํ์ง ์์์. ๋ค๋ง ์ ์ผ๋ฉด ์ ์ ์๋ก ์ ์ง๋ณด์์ ์ข์์.
๋ค๋ง ์ด ๋ฌธ๊ตฌ๋ ์ ๋ง ์ข๋ค์.
ํจ์๋ ํ ๊ฐ์ง ์ผ๋ง ํด์ผ ํ๋ฉฐ, ๊ฐ๊ธ์ ์๊ฒ ๋ง๋ค์ด๋ผ.
์๊ฒ ์ชผ๊ฐค ์๋ก, ์ชผ๊ฐ ํจ์๋ค์ ๋ค์ ๋ ์ฌ์ฉํ ์ ์์ด ์ฌ์ฌ์ฉ์ฑ์ด ๋์ด๋๋ต๋๋ค!
(๋ค๋ง, ์ด๋ฅธ ์๊ธฐ์ง๋ง ๋๋ฌด ์ง๋์น ํจ์ ๋ถํ ์ ๋ ์ฝ๋์ ๋ถ์ฐ์ผ๋ก ์ธํด ๊ณ ํต๋ฐ์ ์๋ ์์ด์. ์์ปจ๋ ๋จ์ํ ๋ํ๋ฉด ๋๋ ๋ก์ง์ ๋ add
๋ผ๋ ํจ์๋ก ๊ตฌํํ ํ์๋ ์๋ค๋ ๊ฑฐ์ฃ . ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ! ๐)
return
! ํจ์์ ์ธ ์ ์๋ ์น๊ตฌ์์.
๊ฐ๋์ ๋ชจ๋ ๋ก์ง์ ๋ ํ์ ์์ด ์ํ๋ ๊ฐ๋ง ์ฐพ๊ณ ๋ก์ง์ ๋๋ด๊ณ ์ถ์ ์๋ ์๊ฒ ์ฃ ? ๊ทธ ๊ฐ์ ๋ค๊ณ ๋น ์ ธ๋์ค๊ธฐ ์ํ ์น๊ตฌ์์.
๋ฐํ๋ฌธ์ด ์๊ธฐ์, ํจ์๋ ๋น๋ก์ ๊ฐ์ ๊ฐ์ง ์ ์๊ฒ ๋ ๊ฑฐ์ฃ ๐ฅฐ
function ํ์ฌ์๊ฐ๊ตฌํ๊ธฐ(now) {
if (now < 12) {
return '์ค์ '
}
return '์คํ';
}
๊ทธ๋ ๋ค๋ฉด ๋ฐํ๋ฌธ์ด ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
ํจ์๋ ์ผ๊ธ๊ฐ์ฒด๋ก์จ ์ฑ์ง์ ์ ์งํด์ผ ํด์. ์ผ๊ธ๊ฐ์ฒด๊ฐ ๋ญ์ฃ ? ๊ฐ์ ๊ฐ์ ธ์ผ ํ์ฃ !
๋ฐ๋ผ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฐํ๋ฌธ์ ์ ์ธํ์ง ์์๋, ์๋ฌต์ ์ผ๋ก undefined
๋ฅผ ๋ฐํํฉ๋๋ค!
์ด๋ง์ ๋ ๊ธธ๊ฒ ๋์๋๋ฐ์, ๊ฒฐ๊ตญ ์ธ์๋ก ์ ๋ฌํ ๊ฐ์ ํ์ (์์ ํ์ , ๊ฐ์ฒด ํ์ )์ ํน์ฑ์ ์ ๋ฐ์ํ๋ค๋ ๊ฒ๋๋ค.
ํนํ ๊ฐ์ฒด ํ์ ์ ๋ถ๋ณ์ฑ์ ๋ํ ์ด์๊ฐ ์๋ค๋ ๊ฒ์ ๋ฐ๋ก ์ง์ ํํธ์์ ํ์ธ ๊ฐ๋ฅํ์ฃ ? ๐ ๊ฐ์ฒด ํ์ ์์์ ์ฐธ์กฐ๊ฐ์ ๋ค๊ฐ์ ๊ฐ์ฒด ๊ฐ์ ๊ณต์ ํ๊ณ ์๋ค๋ ๊ฒ์ ์ ๋ ํด์ฃผ์ธ์!
์๊ทผ ๋ง์ด ์ฌ์ฉํ๋ ์น๊ตฌ์์.
ํนํ ์ ์ญ ๋ค์์คํ์ด์ค๋ฅผ ์ค์ผ์ํค์ง ์๋๋ก ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
๋ณดํต ์ด๊ธฐํํ ๋๋ง ๋์ํด์ผ ํ ๋ก์ง์ด ์์ ๋ ์จ์! ๐
(() => {
// ...
})();
// ๊ฐ์ผ๋ก๋ ํ ๋นํ ์ ์์ด์!
const total = (((a, b) => a + b)(1, 2));
console.log(total); // 3
์ฝ๊ฒ ์๊ฐํ๋ค๋ฉด, ()
์ผ๋ก ๊ฐ์ผ ์๊ฐ, ํจ์ ๋ฆฌํฐ๋ด ํํ์์ด ๋์ฃ ?
๊ทธ ์์ ๋ฐ๋ก ํธ์ถํ๋ค!๋ผ๊ณ ์๊ฐํ์๋ฉด ํธํฉ๋๋ค :)
์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ ๋ ๊ฒ ํ์ดํ ํจ์๋ก๋ ํ ๋๋ ๋ง์ง๋ง, ์ด๋ฆ์ ์จ์ฃผ๋ ๊ฒฝ์ฐ๋ ์์ด์.
์ด์ ๋, ์ ๋ก์ง์ ๋ํ ๋ถ์ฐ ์ค๋ช
์ ์๋ณ์๋ก ํ ์ ์๊ธฐ ๋๋ฌธ์ด์ฃ . ๊ทธ๋๋ ์ ์ญ ๋ค์์คํ์ด์ค๋ฅผ ๊ฑด๋๋ฆฌ์ง ์์ผ๋๊น์! ๐
์... ์ด ์น๊ตฌ๋ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ์น๊ตฌ์ฃ !
๋ฐ๋ผ์ ์๋ชป๋ ์ฌ์ฉ์ ๋ฌดํ ํธ์ถ๋ก ์ธํ ์ฝ์คํ ํญ๋ฐ๋ก ์ด์ด์ง ์ ์๋ต๋๋ค ๐ฅฒ
ํญ์ ๋ฆฌํด์ ์ด๋ป๊ฒ ํ ์ง๋ฅผ ๊ณ ๋ฏผํ๋ฉด์ ํ๊ธฐ!
๊ฒฐ๊ตญ์๋ ๋ฆฌํด ๊ฐ์ ๋ฐํ์ผ๋ก ๋ค์ ๊ณ์ฐํ๋ ๊ฑฐ๋๊น์. ๐๐ป
function factorial(num, result = 1) {
if (typeof num !== 'number' || num < 0) return null;
return num < 1 ? result : factorial(num - 1, result * num);
}
console.log(factorial(5)) // 120;
ํจ์๋ ํจ์ ๋ด๋ถ์ ๋ ํจ์๋ฅผ ๋ง๋ค์ด์ค ์ ์์ด์.
์ด๋ ๊ฒ ํ๋ ์ด์ ๋, ์ด ์ญ์ ๋ค์์คํ์ด์ค๋ฅผ ๊น๋ํ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํจ์ด์์.
๊ตณ์ด ๋ค๋ฅธ ๊ณณ์์ ์ธ ์ผ์ด ์๋๋ฐ, ์ ์ญ์ผ๋ก ๊ด๋ฆฌํ ์ด์ ๋ ์๊ธฐ ๋๋ฌธ์ด์ฃ ! ๐๐ปโโ๏ธ
function outer() {
function inner() {
...
}
inner();
}
์ฝ๋ฐฑํจ์ ์ ๋ง ์ค์ํ์ฃ . ๊ทธ๋ฐ๋ฐ ์ฌ์ค ๋งค์ฐ ๊ฐ๋จํ ์น๊ตฌ์ ๋๋ค.
์ฐ๋ฆฌ ๋ค์ ๋ ๋ ์ฌ๋ ค ๋ณด์๊ตฌ์. ํจ์๋ ๊ฐ์ด์ฃ ?
๋งค๊ฐ๋ณ์๋ ์ธ์๋ก ์ ๋ฌ๋ ๊ฐ์ ํ ๋นํ์ฃ ?
๋ฐ๋ผ์ ์ฝ๋ฐฑ ํจ์๋ ์ธ์๋ก ์ธ๋ถ์์ ์ ๋ฌํ๋ ํจ์๋ฅผ ์๋ฏธํด์. ๋ฐ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ง์ด์ฃ !
์ฐ๋ฆฌ๊ฐ ํ์์ ๋ณด๋ addEventListener
๋ฉ์๋๋ฅผ ์๊ฐํ๋ฉด ์ฌ์์ ๐
const onClick = () => {
console.log('hi');
}
$element.addEventListener('click', onClick)
onClick
์ด ์ฌ๊ธฐ์ ์ฝ๋ฐฑ ํจ์์
๋๋ค. ์ด๋ ๊ฒ ํด์ผ ํ ๋ก์ง๋ค์ ํฌํผํจ์๋ก ์ถ์ํํด์ ์ ๋ฌํ๋๊น, ํจ์๊ฐ ๊ธฐ๋ฅํ ์ ์๋ ํ์ฅ์ฑ์ด ๋์ฑ ๊ฑฐ๋ํด์ง ๊ฑฐ์์. ์์ฒญ๋ ๋ง๋ฒ์ด์ฃ ! โจ
์ด๋ ๊ฒ ํจ์์ ์ธ๋ถ์์ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌ ๋ฐ์ ํจ์๋ฅผ ๊ณ ์ฐจ ํจ์๋ผ๊ณ ํฉ๋๋ค.
์ด ์น๊ตฌ๋ ์์ผ๋ก ๋ง์ด ๊ดด๋กญํํ
๋, ์ธ์๋์ฃ !
์ด๋ค ๋์ผํ ์ธ์๊ฐ ๋ค์ด์์ ๋ ๊ฐ์ ๊ฐ์ ๋ฐํํ๋, ์ฆ ์ธ๋ถ ์ํ์ ์์กดํ์ง ์๊ณ ์ผ์ ํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌํ๋ ํจ์๋ฅผ ์์ํจ์๋ผ ํ๊ณ , ๊ทธ๋ ์ง ์์ ์น๊ตฌ๋ฅผ ๋น์์ํจ์๋ผ๊ณ ํฉ๋๋ค.
์ฒ์ ๋ค์ผ์ค ๋๋ ์๋ฟ์ง ์์ผ์ค ๊ฑฐ์์. ํ์ง๋ง ์์๋ฅผ ๋ณด๋ฉด ์ดํด๊ฐ ๊ฐ์ค ๊ฒ๋๋ค!
const arr = [1,4,3,2]
console.log(arr.map((a, i) => i + 1)) // [1,2,3,4]
console.log(arr) // [1,4,3,2]
// ๋น์์ํจ์
const arr = [1,4,3,2]
arr.sort((a, b) => a - b);
console.log(arr) // [1,2,3,4]
๋ํ์ ์ผ๋ก map
์ด ์์ํจ์์ด๋ฉฐ, sort
๊ฐ ๋น์์ํจ์์
๋๋ค.
map
์ผ๋ก ์ฐ์ฐ์ด ๋๋ฉด arr
์์ฒด๋ ๋ณํ์ง ์์ฃ ? ์ฆ, ์์ํจ์๋ ์ธ๋ถ ์ํ์ ์์กดํ์ง ์๋ ํจ์์ด๊ธฐ์, ๋ฐ๋ผ์ ์ค์ง ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๊ณ ๋ด๋ถ์ ๋
๋ฆฝ์ ์ธ ํ๊ฒฝ์์ ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ์ ์์ํ๋ค๋ ๊ฒ์ด์ฃ !
๋ฐ๋ฉด sort
๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๊ณ , arr
๋ผ๋ ์ธ๋ถ์ ์ํ ๊ฐ์ ๋ณํ์์ผฐ์ด์. ๋ฐ๋ผ์ ๋น์์ํจ์๋ผ๋ ๊ฒ๋๋ค.
๋น์ฐํ ์์ํจ์๊ฐ ๋์ฑ ์งํฅํด์ผ ํ ํจ์๊ฒ ์ฃ ? ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ์์ํจ์๋ฅผ ์งํฅํด์ผ ํ๋๋ก ํฉ์๋ค.
๊ทธ๋์ ๋น์์ํจ์์ธsort
๋ ๊ฐ๋์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ณ์ ์ค์๋ก ์ทจ๊ธ ๋ฐ์ต๋๋ค. ๐ญ
์ค... 3์๊ฐ์ด ๋จ์ง ๊ฑธ๋ ธ๋๋ฐ์.
์ ๋ง 35์ชฝ ๋ถ๋์ ์ ์ง ์์ ๋ด์ฉ์ด์์ด์.
๋ค๋ง, ์ ์ญ์ ์ด๋ฅผ ์ ๋ฆฌํ๋ฉด์ ํจ์์ ์คํ ์์๋ผ๋์ง ๋ํ
์ผํ ๋ถ๋ถ์์ ๋ง์ด ๊นจ๋ซ๊ณ ๊ฐ๋๋ค.
ํนํ ์๋ณ์ ๋ถ๋ถ์ ์ข ๋ ์ ๋ฅผ ๋ฐ์ฑํ๊ฒ ๋์๋ ๊ณ๊ธฐ๋ฅผ ์ฃผ์์ด์.
๊ธฐ๋ณธ๊ธฐ๊ฐ ์์ด๋๊น, ์ ์ ๋ ์ค๋ช ์ด ํ๋ถํด์ง๊ณ ๋จ๋จํด์ง๋ ๊ธฐ๋ถ์ด ๋ค์ด์ ์ข์์. > ๋ค๋ค ์ฆ๊ฑฐ์ด ์ฝ๋ฉํ์๊ธธ ๋ฐ๋ผ๋ฉฐ. ์ด์! ๐