๋ฐ์ํ
1๏ธโฃ ํจ์, function ์ด๋?
- ์๋ฐ์คํฌ๋ฆฝํธ์์ function์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ๋ธ๋ก์ ์๋ฏธ.
- ์ํคํ ์ฒ ํ์ , ์ ์ง ๋ณด์์๋ ์ ๋ฆฌ!
- function ์ ๋ณ์์ฒ๋ผ ์ ์ธ ๊ฐ๋ฅ.
- ์ ๋ ฅ๊ฐ parameter ์ ๋ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅ return ํ๋ ๋ฐฉ์.
- ๋ณดํต function(์ธ์)๋ผ๊ณ ๋งํ๋๋ฐ, parameter๋ ์ ์ธํ ๋, argument ๋ ์ค์ ์ฌ์ฉ๋ ๋์ ์ฉ์ด. ํ์ ์์ค! ์๊ธฐ.
- function์ ๋ค๋ฅธ function์ (prarameter)๋ก๋ ์ ๋ฌ ๊ฐ๋ฅ.
2๏ธโฃ ์๋ฐ์คํฌ๋ฆฝํธ์ ํธ์ด์คํ Hoisting ๊ณผ ํจ์ ์ ์ธ
- Hoisting์ ๋ณ์์ ํจ์ ์ ์ธ์ด Scope์ ๋งจ ์๋ก ์ฎ๊ฒจ์ง๋ ๊ฒ.
- function ์ ๋ณ์ var let const ์ ๋ง์ฐฌ๊ฐ์ง๋ก hoisting ๋๋ค.
์ฆ, ์ฝ๋ ์์์ ์ ์ธ๋๊ธฐ ์ ์๋ ์ ํจ ํ๊ณ ์ ์ญ์ผ๋ก ์ํฅ์ ๋ผ์น ์ ์๋ค๋ ์๋ฏธ. - ํจ์ ์ ์ธ๋ฌธ์ hoisting ๋์ง๋ง ํจ์ ํํ์์ hoisting๋์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋๋ฐ
์ ํํ ๋งํ๋ฉด Temporal Dead Zone, ์ผ์์ ์ฌ๊ฐ์ง๋์ ์๊ธฐ ๋๋ฌธ์ ์ ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ํ์์ ๋งํ๋ค. - ๊ถ์ฅ๋๋ ๋ฐฉ์์ด ์๋ ๊ฑด ์๋์ง๋ง ๋๋๋ก hoisting์ ์ํฅ์ ์ต์ํ ํ๋ ๊ฒ์ด ์ ์ง๋ณด์ ์ธก๋ฉด์์ ์ข์.
3๏ธโฃ function ์ ์ธ๋ฌธ
- function name() { return } ํค์๋๋ฅผ ์ฌ์ฉํด ์ ์ธ.
- hoisting ๋ฐ์.
add('๊ธฐ์',84) // hoisting
function add(x, y){
return x + y;
}
// = ๊ธฐ์84
function delivery (a,b) {
let food = '๐pizza'
let result = `${food} ${a}๊ฐ๋ ${b}์`
return result
}
delivery(1,10000) // = '๐pizza 1๊ฐ๋ 10000์'
4๏ธโฃ function ํํ์
- let name2 = function() { return } ํค์๋๋ฅผ ์ฌ์ฉํด ํํ.
- let ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ function ์ ๋ณ์์ ํ ๋น.
- hoisting ๋ฐ์ํ์ง ์์.
let add = function(x,y) {
return x+y
}
add(100,100)
// = 200
5๏ธโฃ Callback function ์ฝ๋ฐฑ ํจ์ ํํ์
- function์ agument๋ก ์ฃผ๊ณ ๋ด๊ฐ ๋๋ฅผ ๋์ค์ ์คํ์ํค๊ฒ ๋ค๋ ๊ฒ.
- function์ ๋์ค์ ๋ถ๋ฌ์ค๊ฒ~ ์ฝ๋ฐฑํ ๊ฒ~ ๋ผ๋ ์๋ฏธ.
- hoisting ๋ฐ์ํ์ง ์์.
//์ฝ๋ฐฑํจ์
function bread(item, price) {
return item + price;
}
function coffee(item, price) {
return item + price
}
function order(a,b) {
return a('๐ฅฏBagle',100) + b('โLatte',300)
}
order(bread,coffee) // = '๐ฅฏBagle100โLatte300'
6๏ธโฃ Arrow function ํ์ดํ ํจ์ ํํ์
- =>๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํํํ๋ ๋ฐฉ์.
- ์ผ๋ฐ์ ์ผ๋ก ๋จ์ํ ํจ์๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉ.
- ์๋ ์ฝ๋์์ arrow1 ํจ์๋ x๋ฅผ ์ ๊ณฑํ์ฌ ๋ฐํํ๊ณ , arrow2 ํจ์๋ x์ y๋ฅผ ๋ํ์ฌ ๋ฐํ.
//ํ์ดํํจ์ ~๋! (์๊ฐ๋ฝ์ง) ์ด๋ผ๋ ํ๋์ ์์ํ๋ฉฐ ์๊ธฐ
let arrow1 = x => x**2
let arrow2 = (x, y) => {
return x + y;
};
arrow1(2); // = 4
arrow2(10,10); // = 20
// 01. ์ฝ๋ฐฑํจ์ ์์ฑ
function callback(a, b, test) {
let result = test(a,b);
console.log(result)
};
//02. ์ ๊ท ํ์ดํํจ์ ์์ฑ
let multiply = (c,d) => { return c * d };
//03. multiply ํจ์ ์ฝ๋ฐฑ
callback(10,10,multiply); // = 100
7๏ธโฃ ๊ธฐ๋ช ํจ์(named) ์ ์ต๋ช ํจ์(anonymous)
- ๊ธฐ๋ช ํจ์๋ ์ด๋ฆ์ด ์๋ ํจ์๋ก hoisting ๊ฐ๋ฅ, ๋๋ฒ๊น ์ ์ฉ์ด.
- ์ต๋ช
ํจ์๋ ์ด๋ฆ์ด ์๋ ํจ์๋ก hoisting ๋ถ๊ฐ, ํ ๋ฒ๋ง ์ฌ์ฉํ ๋ ์ ์ฉ.
๋ณ์์ ํ ๋น๋๊ฑฐ๋ ๋ค๋ฅธ ํจ์์ parameter๋ก ์ฌ์ฉ.
// ๊ธฐ๋ช
ํจ์
function namedFunction() {
console.log("๐i'm named function");
}
namedFunction();
// ์ต๋ช
ํจ์ 1
const anonymousFunction = function() {
console.log("โi'm anonymous function");
}
anonymousFunction();
// ์ต๋ช
ํจ์ 2 - 1ํ์ฑ์ผ๋ก ๋ฐ๋ก ์คํ
(function() {
console.log('๐hello World')
})();
๐ฉ๐ป ์์ฝ!
- ์๋ฐ์คํฌ๋ฆฝํธ์์ function์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ๋ธ๋ก.
- function ์ ๋ณ์์ฒ๋ผ ์ ์ธ ๊ฐ๋ฅ, ์ฝ๋ฐฑ ๊ฐ๋ฅ.
- ํธ์ด์คํ (hoisting)์ ์ํฅ์ ๋ฐ์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ ์ ์์ผ๋ ์ฃผ์.
- JS์์ ๊ธฐ๋ณธ์ค์ ๊ธฐ๋ณธ! ์๋์์ฑ ๊ธฐ๋ฅ์ ์์กดํ๋ ๊ฒ๋ ๋จ์ ์ฝ๋ ๋ฐฐ๋ผ๋ ๊ฒ๋ ์ฃผ์ํด์ผ ํ๋ค ...
๊ณ์ ํ์ดํํด์ ์๋ฒฝํ๊ฒ ์ต์ํด์ง ๊ฒ!
๋ฐ์ํ