Skip to content

Latest commit

ย 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

README.md

function

  • ํ•จ์ˆ˜ ์ž‘์„ฑ ์—ฐ์Šต์„ ์œ„ํ•œ ํด๋”์ž…๋‹ˆ๋‹ค.

๋ชฉ์ฐจ


๋ฌธ๋ฒ•

[ํ•จ์ˆ˜]

  1. ์„ ์–ธ
  2. ํ‘œํ˜„์‹
function ํ•จ์ˆ˜์ด๋ฆ„(๋งค๊ฐœ๋ณ€์ˆ˜) {
  // ํ•จ์ˆ˜ ๋ณธ๋ฌธ. return ๊ฐ’์ด ์—†์œผ๋ฉด undefined ๋ฐ˜ํ™˜

  // ์—๋Ÿฌ ์ง์ ‘ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฒฝ์šฐ
  if (์กฐ๊ฑด1 || ์กฐ๊ฑด2) {  // Truthyํ•  ๊ฒฝ์šฐ ์‹คํ–‰
    throw new Error(
      '์—๋Ÿฌ ๋ฌธ๊ตฌ ์ž…๋ ฅ'
    );
  }

  return ...;
}

 // ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹น ํ›„ ์ถœ๋ ฅ ๋˜๋Š” ๋ฐ”๋กœ ์ถœ๋ ฅ ํ†ตํ•ด ๊ฒฐ๊ณผ๊ฐ’ ํ™•์ธ
let ๋ณ€์ˆ˜ = ํ•จ์ˆ˜์ด๋ฆ„1(์ธ์ž);  // ํ•จ์ˆ˜์— ์ „๋‹ฌ
console.log(๋ณ€์ˆ˜);

ํ•จ์ˆ˜ ํ‘œํ˜„์‹

let ๋ณ€์ˆ˜1 = function() {
  // ํ•จ์ˆ˜ ๋ณธ๋ฌธ
}

๋ณ€์ˆ˜1;  // ํ•จ์ˆ˜ ๋ณธ๋ฌธ(์†Œ์Šค ์ฝ”๋“œ)์„ ๋ฌธ์žํ˜•์œผ๋กœ ๋ฐ”๊พธ์–ด ์ถœ๋ ฅ

const ๋ณ€์ˆ˜2 = ํ•จ์ˆ˜์ด๋ฆ„1;  // ํ•จ์ˆ˜๋ฅผ ๋ณต์‚ฌํ•ด ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹น
๋ณ€์ˆ˜2();  // ํ•จ์ˆ˜๊ฐ’ ๋ฐ˜ํ™˜
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ ํ•จ์ˆ˜๋ฅผ ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค.

ํ•จ์ˆ˜ ํ‘œํ˜„์‹ vs ํ•จ์ˆ˜ ์„ ์–ธ

Category function declaration function expression
์ƒ์„ฑ์‹œ ๋…๋ฆฝ๋œ ๊ตฌ๋ฌธ ํ˜•ํƒœ ํ‘œํ˜„์‹์˜ ์ผ๋ถ€
ํ˜ธ์ถœ ์‹ค์ œ ์‹คํ–‰ ํ๋ฆ„์ด ํ•ด๋‹น ํ•จ์ˆ˜์— ๋„๋‹ฌํ–ˆ์„๋•Œ ์ •์˜๋˜๊ธฐ ์ „๋„ ๊ฐ€๋Šฅ -> but. Bad Case
lexical environment ํ•จ์ˆ˜ ๋ณธ๋ฌธ ์ „์ฒด -> Binding Object. ์–ธ์ œ๋“ ์ง€ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋งŒ -> TDZ(์ž„์‹œ ์‚ฌ๊ฐ์ง€์—ญ). ํ• ๋‹น ์ „ ๋ถˆ๊ฐ€
์˜ˆ์‹œ var: undefined ๋ฐ˜ํ™˜ -> ํ•จ์ˆ˜ ํ˜ธ์ถœ X let, const: ์ฐธ์กฐ ์˜ค๋ฅ˜
์Šค์ฝ”ํ”„ ์ฝ”๋“œ ๋ธ”๋ก ๋‚ด ๊ฐ€๋Šฅ. ๋ฐ– ๋ถˆ๊ฐ€๋Šฅ ๋ธ”๋ก ๋‚ด์™ธ ๋ชจ๋‘ ๊ฐ€๋Šฅ
  • ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ „, Global context ํ™˜๊ฒฝ์—์„œ ์ „์—ญ์— ์„ ์–ธ๋œ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์„ ์ฐพ๊ณ , ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ, ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „ '์ดˆ๊ธฐํ™” ๋‹จ๊ณ„'์—์„œ ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

์ฝœ๋ฐฑ ํ•จ์ˆ˜

function warning(notification, permit, prohibit){
  if (confirm(notification)) permit()
  else prohibit();
}

warning(
  "์ด๊ณณ์€ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋“ค์–ด๊ฐ€์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?",
  function() { console.log("์ž…์žฅ์„ ํ—ˆ๋ฝํ•ฉ๋‹ˆ๋‹ค."); },
  function() { console.log("์ž…์žฅ์„ ๋ถˆํ—ˆํ•ฉ๋‹ˆ๋‹ค."); }
);
  • ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๊ณ  "๋‚˜์ค‘์— ํ˜ธ์ถœ(back)"
  • ์œ„์™€ ๊ฐ™์ด ์ด๋ฆ„ ์—†์ด ์„ ์–ธํ•œ ํ•จ์ˆ˜๋ฅผ "์ต๋ช…ํ•จ์ˆ˜(anonymous function)"์ด๋ผ ํ•œ๋‹ค.

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

  • ํ•จ์ˆ˜๋กœ์„œ์˜ ๊ธฐ๋Šฅ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ ์œผ๋กœ ํ›จ์”ฌ ๊ฐ€๋ณ๋‹ค.

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ, ํ•จ์ˆ˜ ํ‘œํ˜„์‹๊ณผ ์ฐจ์ด์ 

  1. arguments ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ -> ...args

  2. constructor, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค.

  3. this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ์ด ๋‹ค๋ฅด๋‹ค. - ๋ถ€๋ชจ์˜ this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” window ์ถœ๋ ฅ