[JAYโŒจ๏ธJS] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜ function ์ดํ•ดํ•˜๊ธฐ

2023. 2. 27. 16:08ใ†javascript

๋ฐ˜์‘ํ˜•

JS Fuction

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์—์„œ ๊ธฐ๋ณธ์ค‘์˜ ๊ธฐ๋ณธ! ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์— ์˜์กดํ•˜๋Š” ๊ฒƒ๋„ ๋‚จ์˜ ์ฝ”๋“œ ๋ฐฐ๋ผ๋Š” ๊ฒƒ๋„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค ...
    ๊ณ„์† ํƒ€์ดํ•‘ํ•ด์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ต์ˆ™ํ•ด์งˆ ๊ฒƒ!

 

 

 

๋ฐ˜์‘ํ˜•