๐Ÿ“– ํ•จ์ˆ˜

c_yjยท2022๋…„ 6์›” 25์ผ
0

DeepDive

๋ชฉ๋ก ๋ณด๊ธฐ
9/42
post-thumbnail

โญ๏ธ ํ•จ์ˆ˜๋ž€?

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•จ์ˆ˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์ฝ”๋“œ ๋ธ”๋ก์œผ๋กœ ๊ฐ์‹ธ์„œ ํ•˜๋‚˜์˜ ์‹คํ–‰ ๋‹จ์œ„๋กœ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค.
ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ •์˜๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•œ๋‹ค.

// ํ•จ์ˆ˜ ์ •์˜
function add(x,y) {
  return x+y;
}

์ธ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋ฉด์„œ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์‹œํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด๋ผ ํ•œ๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ฝ”๋“œ ๋ธ”๋ก์— ๋‹ด๊ธด ๋ฌธ๋“ค์ด ์ผ๊ด„์ ์œผ๋กœ ์‹คํ–‰๋˜๊ณ , ์‹คํ–‰ ๊ฒฐ๊ณผ, ์ฆ‰ ๋ฐ˜ํ™˜๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

// ํ•จ์ˆ˜ ํ˜ธ์ถœ
var result = add(2,5);
// ํ•จ์ˆ˜ add์— ์ธ์ˆ˜ 2, 5๋ฅผ ์ „๋‹ฌํ•˜๋ฉด์„œ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐ˜ํ™˜๊ฐ’ 7์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
console.log(result); // 7

โญ๏ธ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

ํ•จ์ˆ˜๋Š” ๋ช‡ ๋ฒˆ์ด๋“  ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์ด๋ผ๋Š” ์ธก๋ฉด์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.
์œ ์ง€๋ณด์ˆ˜์˜ ํŽธ์˜์„ฑ์„ ๋†’์ด๊ณ  ์‹ค์ˆ˜๋ฅผ ์ค„์—ฌ ์ฝ”๋“œ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’์ธ๋‹ค
์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ

โญ๏ธ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด ํƒ€์ž…์˜ ๊ฐ’์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ˆซ์ž ๊ฐ’์„ ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•จ์ˆ˜๋„ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์€ function ํ‚ค์›Œ๋“œ ํ•จ์ˆ˜ ์ด๋ฆ„, ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ชฉ๋ก, ํ•จ์ˆ˜ ๋ชธ์ฒด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค

// ๋ณ€์ˆ˜์— ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์„ ํ• ๋‹น
var f = function add(x,y) {
  return x+y;
};

ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด๋‹ค ํ•จ์ˆ˜๋Š” ๊ฐ์ฒด์ง€๋งŒ ์ผ๋ฐ˜ ๊ฐ์ฒด์™€๋Š” ๋‹ค๋ฅด๋‹ค. ์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜ ๊ฐ์ฒด์—๋Š” ์—†๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด๋งŒ์˜ ๊ณ ์œ ํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

โญ๏ธโญ๏ธโญ๏ธ ํ•จ์ˆ˜ ์ •์˜

ํ•จ์ˆ˜ ์ •์˜ ๋ฐฉ์‹์˜ˆ์‹œ
ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธfunction add(x,y) { return x+y; };
ํ•จ์ˆ˜ ํ‘œํ˜„์‹var add= function add(x,y) { return x+y; };
Function ์ƒ์„ฑ์ž ํ•จ์ˆ˜var add = new Function('x','y', 'return x+y');
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(ES6)var add = (x,y) => x+y;

๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ํ•จ์ˆ˜ ์ •์˜
๋ณ€์ˆ˜๋Š” ์„ ์–ธํ•œ๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ ํ•จ์ˆ˜๋Š” ์ •์˜ํ•œ๋‹ค๊ณ  ํ‘œํ˜„ํ–ˆ๋‹ค. ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด ํ‰๊ฐ€๋˜๋ฉด ์‹๋ณ„์ž๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ํ•จ์ˆ˜ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋œ๋‹ค. ๋”ฐ๋ผ์„œ ECMAScript ์‚ฌ์–‘์—์„œ๋„ ๋ณ€์ˆ˜์—๋Š” ์„ ์–ธ, ํ•จ์ˆ˜์—๋Š” ์ •์˜๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

โญ๏ธ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ

function add(x,y){
  return x+y;
}  

//ํ•จ์ˆ˜ ์ฐธ์กฐ
// console.dir์€ console.log์™€๋Š” ๋‹ฌ๋ฆฌ ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๊นŒ์ง€ ์ถœ๋ ฅํ•œ๋‹ค.
// ๋‹จ,Node.js ํ™˜๊ฒฝ์—์„œ๋Š” console.log์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
console.dir(add); // f add(x,y)

//ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(add(2,5)); //7

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด๊ณผ ํ˜•ํƒœ๊ฐ€ ๋™์ผํ•˜๋‹ค. ๋‹จ, ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด์€ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.

โญ๏ธ ํ•จ์ˆ˜ ํ‘œํ˜„์‹

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋Š” ๊ฐ’์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ํ• ๋‹น ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ๋  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ๊ฐ’์˜ ์„ฑ์งˆ์„ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ์ผ๊ธ‰ ๊ฐ์ฒด๋ผ ํ•œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด๋‹ค.

// ํ•จ์ˆ˜ ํ‘œํ˜„์‹
var add = function (x,y) {
  return x + y;
};

console.log(add(2,5)); // 7

โญ๏ธ ํ•จ์ˆ˜ ์ƒ์„ฑ ์‹œ์ ๊ณผ ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…

// ํ•จ์ˆ˜ ์ฐธ์กฐ
console.dir(add) // f add(x,y)
console.dir(sub) // undefined

// ํ•จ์ˆ˜ ํ˜ธ์ถœ
console.log(add(2,5)); // 7
console.log(sub(2,5,)); // TypeError : sub is not a function

// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function add(x,y) {
  return x+y; 
}

// ํ•จ์ˆ˜ ํ‘œํ˜„์‹
var sub = function (x,y) {
  return x-y;
};

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ ์ด์ „์— ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹ ์ด์ „์— ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋Š” ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜์™€ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜์˜ ์ƒ์„ฑ ์‹œ์ ์ด ๋‹ค๋ฅด๊ธฐ ๋–„๋ฌธ์ด๋‹ค.

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด ์ฝ”๋“œ์˜ ์„ ๋‘๋กœ ๋Œ์–ด ์˜ฌ๋ ค์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณ ์œ ์˜ ํŠน์ง•์„ ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด๋ผ ํ•œ๋‹ค.

โญ๏ธโญ๏ธ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

ES6์—์„œ ๋„์ž…๋œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” function ํ‚ค์›Œ๋“œ ๋Œ€์‹  ํ™”์‚ดํ‘œ๋ฅผ ์‚ฌ์šฉํ•ด ์ข€ ๋” ๊ฐ„๋žตํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ์ต๋ช… ํ•จ์ˆ˜๋กœ ์ •์˜ํ•œ๋‹ค.

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
const add= (x,y) => x+y; 
console.log(add(2,5)); // 7

โญ๏ธโญ๏ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ

โญ๏ธ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ˆ˜

ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฐ’์„ ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์ธ์ˆ˜๋Š” ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์‹์ด์–ด์•ผ ํ•œ๋‹ค. ์ธ์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋–„ ์ง€์ •ํ•˜๋ฉฐ, ๊ฐœ์ˆ˜์™€ ํƒ€์ž…์— ์ œํ•œ์ด ์—†๋‹ค.

// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function add(x,y) {
  return x+y;
}

// ํ•จ์ˆ˜ ํ˜ธ์ถœ
// ์ธ์ˆ˜ 1๊ณผ 2๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜ x์™€ y์— ์ˆœ์„œ๋Œ€๋กœ ํ• ๋‹น๋˜๊ณ  ํ•จ์ˆ˜ ๋ชธ์ฒด์˜ ๋ฌธ๋“ค์ด ์‹คํ–‰๋œ๋‹ค.
var result = add(1,2);

โญ๏ธ ๋ฐ˜ํ™˜๋ฌธ

ํ•จ์ˆ˜๋Š” return ํ‚ค์›Œ๋“œ์˜ ํ‘œํ˜„์‹์œผ๋กœ ์ด๋ค„์ง„ ๋ฐ˜ํ™˜๋ฌธ์„ ์‚ฌ์šฉํ•ด ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ•จ์ˆ˜ ์™ธ๋ถ€๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

function multiply(x,y){
  return x * y; // ๋ฐ˜ํ™˜๋ฌธ
}

// ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋œ๋‹ค.
var result = multiply(3,5);
console.log(result); // 15

๋ฐ˜ํ™˜๋ฌธ์€ ๋‘๊ฐ€์ง€ ์—ญํ• ์„ ํ•œ๋‹ค

  • ๋ฐ˜ํ™˜๋ฌธ์€ ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ค‘๋‹จํ•˜๊ณ  ํ•จ์ˆ˜ ๋ชธ์ฒด๋ฅผ ๋น ์ ธ๋‚˜๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ˜ํ™˜๋ฌธ ์ดํ›„์— ๋‹ค๋ฅธ ๋ฌธ์ด ์กด์žฌํ•˜๋ฉด ๊ทธ ๋ฌธ์€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋ฌด์‹œ๋œ๋‹ค.
  • ๋ฐ˜ํ™˜๋ฌธ์€ return ํ‚ค์›Œ๋“œ ๋’ค์— ์˜ค๋Š” ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค. return ํ‚ค์›Œ๋“œ ๋’ค์— ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ํ‘œํ˜„์‹์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด undefined๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

๋‹ค์–‘ํ•œ ํ•จ์ˆ˜์˜ ํ˜•ํƒœ

โญ๏ธ ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์ •์˜์™€ ๋™์‹œ์— ์ฆ‰์‹œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋Š” ๋‹จ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๋ฉฐ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

// ์ต๋ช… ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜
(function () {
  var a = 3;
  var b = 5;
  return a + b;
}());

์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„์ด ์—†๋Š” ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

โญ๏ธ ์žฌ๊ท€ ํ•จ์ˆ˜

ํ•จ์ˆ˜๊ฐ€ ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ์žฌ๊ท€ ํ˜ธ์ถœ์ด๋ผ ํ•œ๋‹ค. ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ–‰์œ„, ์ฆ‰ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.
์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ๋ฐ˜๋ณต๋˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

function countdown(n) {
  if (n < 0) return;
  console.log(n)
  countdown(n - 1); // ์žฌ๊ท€ ํ˜ธ์ถœ
}

conutdown(10);

์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ๋ฐ˜๋ณต๋˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ๋ฐ˜๋ณต๋ฌธ ์—†์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ ๋ฌดํ•œ ๋ฐ˜๋ณต์— ๋น ์งˆ ์œ„ํ—˜์ด ์žˆ๊ณ , ์ด๋กœ ์ธํ•ด ์Šคํ… ์˜ค๋ฒ„ํ”Œ๋กœ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

โญ๏ธ ์ค‘์ฒฉ ํ•จ์ˆ˜

ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์ •์˜๋œ ํ•จ์ˆ˜๋ฅผ ์ค‘์ฒฉ ํ•จ์ˆ˜ ๋˜๋Š” ๋‚ด๋ถ€ ํ•จ์ˆ˜๋ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค‘์ฒฉ ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜๋ผ ๋ถ€๋ฅธ๋‹ค. ์ค‘์ฒฉ ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ค‘์ฒฉํ•จ์ˆ˜๋Š” ์ž์‹ ์„ ํฌํ•จํ•˜๋Š” ์™ธ๋ถ€ ํ•จ์ˆ˜๋ฅผ ๋•๋Š” ํ—ฌํผ ํ•จ์ˆ˜์˜ ์—ญํ• ์„ ํ•œ๋‹ค.

function outer() {
  var x = 1;
  
  //์ค‘์ฒฉ ํ•จ์ˆ˜
  function inner() {
    var y = 2;
    // ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
    console.log(x+y); // 3
  }
  inner();
}

outer();

โญ๏ธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜

  • ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ผ๊ณ  ํ•˜๋ฉฐ, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜์˜ ์™ธ๋ถ€์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ๋ฐ›์€ ํ•จ์ˆ˜๋ฅผ ๊ณ ์ฐจ ํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.

  • ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ž์‹ ์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ํ•ฉ์„ฑํ•œ๋‹ค. ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฐ›์€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ์‹œ์ ์„ ๊ฒฐ์ •ํ•ด์„œ ํ˜ธ์ถœํ•œ๋‹ค.

  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋ฉฐ ์ด๋•Œ ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
	//์™ธ๋ถ€์—์„œ ์ „๋‹ฌ๋ฐ›์€ f๋ฅผ n๋งŒํผ ๋ฐ˜๋ณต ํ˜ธ์ถœํ•œ๋‹ค.
	function repeat(n, f){
    	for(var i = 0; i < n; i++){
        	f(i); // i๋ฅผ ์ „๋‹ฌํ•˜๋ฉด์„œ f๋ฅผ ํ˜ธ์ถœ
        }
    }

	var logAll = function (i) {
    	console.log(i);
    };
	
	//๋ฐ˜๋ณต ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.
	repeat(5, logAll); // 0 1 2 3 4

	var logOdds = function(i){
    	if(i%2) console.log(i);
    };

	//๋ฐ˜๋ณต ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.
	repeat(5, logOdds); // 1 3

โญ๏ธ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์™€ ๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜

  • ์–ด๋–ค ์™ธ๋ถ€ ์ƒํƒœ์— ์˜์กดํ•˜์ง€๋„ ์•Š๊ณ  ๋ณ€๊ฒฝํ•˜์ง€๋„ ์•Š๋Š”, ์ฆ‰ ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ผ ํ•œ๋‹ค.
  • ์™ธ๋ถ€ ์ƒํƒœ์— ์˜์กดํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š”, ์ฆ‰ ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋น„์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ผ ํ•œ๋‹ค.
profile
FrontEnd Developer

0๊ฐœ์˜ ๋Œ“๊ธ€