ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์™€ ์ผ๋ฐ˜ํ•จ์ˆ˜์˜ ์ฐจ์ด์ 

์„ ์–ธ๋ฐฉ์‹

๐Ÿ“ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹


function square(x) {
  return x * x;
}
        

๐Ÿ“ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹


const square = (x) => {
  return x * x;
};        
        

this ๋ฐ”์ธ๋”ฉ

์ผ๋ฐ˜ ํ•จ์ˆ˜๋Š” this๊ฐ€ ๋™์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ๋˜๋Š” ๋ฐ˜๋ฉด ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ๋ฐ”๋กœ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this์™€ ๊ฐ™๋‹ค.

๐Ÿ“ ์ผ๋ฐ˜ํ•จ์ˆ˜

const cat = {
  name: 'meow',
  foo1: function() {
    const foo2 = function() {
      console.log(this.name);
    }
    foo2();
  }
};

cat.foo1();	// undefined
  • cat.foo1() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ๋‚ด๋ถ€ ํ•จ์ˆ˜ foo2๊ฐ€ ์‹คํ–‰๋จ
  • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋์œผ๋ฏ€๋กœ foo2 ๋‚ด๋ถ€์˜ this๋Š” ์ง€์ •๋˜์ง€ ์•Š์•„์„œ ๊ณง ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  • ์ „์—ญ ๊ฐ์ฒด์— name์ด๋ž€ ์†์„ฑ์€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ undefined๊ฐ€ ๋œธ

๐Ÿ“ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

const cat = {
  name: 'meow',
  foo1: function() {
    const foo2 = () => {
      console.log(this.name);
    }
    foo2();
  }
};

cat.foo1();	// meow
        
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ์˜ this๋Š” ์ž๊ธฐ๊ฐ€ ์ •์˜๋œ ์Šค์ฝ”ํ”„์— ์กด์žฌํ•˜๋Š” this๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค. ์ฆ‰ ์ž๊ธฐ์˜ ์ƒ์œ„์— ์žˆ๋Š” ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋‚ด๋ถ€ํ•จ์ˆ˜์— ์–ด๋– ํ•œ ๋ฐ”์ธ๋”ฉ๋„ ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— this๊ฐ€ cat ๊ฐ€๋ฅดํ‚ค๊ฒŒ ๋œ๋‹ค.

์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ

ํ™”์‚ดํ‘œํ•จ์ˆ˜๋Š” ํ”„๋กœํ† ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ์ด ์–ด๋ ต๋‹ค.
์—ฌ๊ธฐ์„œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ž€ new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๋ฉฐ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
// ์ผ๋ฐ˜ํ•จ์ˆ˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ •์˜
function Person(name, age) {
  this.name = name;
  this.age = age;
}

// ๊ฐ์ฒด ์ƒ์„ฑ
var person1 = new Person('John', 30);
var person2 = new Person('Alice', 25);

console.log(person1.name); // ์ถœ๋ ฅ: John
console.log(person2.age); // ์ถœ๋ ฅ: 25
        

arguments ์ „๋‹ฌ

์ผ๋ฐ˜ํ•จ์ˆ˜์—์„œ๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ชจ๋“  ์ „๋‹ฌ๋œ ์ธ์ž๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” arguments๋ณ€์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ๋Š” arguments๋ณ€์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ“ ์ผ๋ฐ˜ ํ•จ์ˆ˜

function regularFunction() {
  console.log(arguments);
}

regularFunction(1, 2, 3); // ์ถœ๋ ฅ: { '0': 1, '1': 2, '2': 3 
}

๐Ÿ“ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

const arrowFunction = () => {
  console.log(arguments);
}

arrowFunction(1, 2, 3); // Error: arguments is not defined
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ๋Š” arguments๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ๋Œ€์‹ ์— ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ๋Š” Rest parameters๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ „๋‹ฌ๋œ ์ธ์ž๋ฅผ ๋ฐ›๊ณ , args ๋ฐฐ์—ด์— ์ €์žฅํ•œ ํ›„ ์ถœ๋ ฅํ• ์ˆ˜ ์žˆ๋‹ค.
const arrowFunctionWithRest = (...args) => {
  console.log(args);
}

arrowFunctionWithRest(1, 2, 3); // ์ถœ๋ ฅ: [1, 2, 3]