ํ•จ์ˆ˜์˜ ์•”์‹œ์  ํŒŒ๋ผ๋ฏธํ„ฐ - arguments

์•”์‹œ์  ํŒŒ๋ผ๋ฏธํ„ฐ์ธ arguments์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Jul 10, 2021

๊น€ํ˜„๊ธฐ

#JS

ํ•จ์ˆ˜์˜ ์•”์‹œ์  ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” 4ํŽธ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. arguments
  2. this-1
  3. this-2
  4. this-3

๋“ค์–ด๊ฐ€๋ฉฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜์—์„œ ์•”์‹œ์ ์ธ ํŒŒ๋ผ๋ฏธํ„ฐ์ธ arguments์™€ this์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” arguments์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

parameter์™€ arguments

๊ฐ€๋” ๊ฐœ๋ฐœ ์„œ์ ์ด๋‚˜ ๋ฌธ์„œ๋ฅผ ์ฝ๋‹ค ๋ณด๋ฉด parameter์™€ arguments๊ฐ€ ํ—ท๊ฐˆ๋ฆด ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ ๋ชจ์งˆ๋ผ์—์„œ ์นœ์ ˆํ•˜๊ฒŒ ์„ค๋ช…ํ•ด ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ์งˆ๋ผ

function greeting(name) {
  // ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ• ๋•Œ ํ•จ์ˆ˜์•ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜(paramter)
  console.log(`Hello ${name}`);
}

greeting('hyunki'); // ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ๋•Œ ์ „๋‹ฌํ•˜๋Š” ์‹ค์ œ ์ž…๋ ฅ ๊ฐ’(arguments)

์•”์‹œ์ ์ธ ํŒŒ๋ผ๋ฏธํ„ฐ arguments์™€ this

์šฐ๋ฆฌ๋Š” ์œ„์— ์ฝ”๋“œ greeting ํ•จ์ˆ˜์— name์ด๋ผ๋Š” parameter๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์ด์ง„ ์•Š์ง€๋งŒ ์•”๋ฌต์ ์œผ๋กœ 2๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋” ์กด์žฌํ•˜๋Š”๋ฐ ๋ฐ”๋กœ arguments์™€ this ์ž…๋‹ˆ๋‹ค.

arguments ๊ฐ์ฒด

arguments ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ๋ชจ๋“  arguments๋“ค์˜ ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. arguments ๊ฐ์ฒด๋Š” length ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ๋ฐฐ์—ด ์ธ๋ฑ์‹ฑ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

function whatever(a, b, c) {
  console.log(a === 1); // true
  console.log(arguments[2]); // 3
  console.log(arguments[3]); // undefined
  console.log(arguments.length); // 3
  console.log('type', arguments); // Arguments(3)
}
whatever(1, 2, 3);

๋ฐฐ์—ด์ธ๊ฐ€?

๋ฐฐ์—ด ์ธ๋ฑ์‹ฑ์œผ๋กœ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด์„œ ๋ฐฐ์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋ฐฐ์—ด์€ ์•„๋‹ˆ๊ณ  ์œ ์‚ฌ ๋ฐฐ์—ด(Array-like) ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

  • ๋‹ค๋ฅธ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด๋กœ๋Š” HTMLCollection๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐ์—ด์€ ์•„๋‹ˆ์ง€๋งŒ ์•„๋ž˜ sum ํ•จ์ˆ˜์ฒ˜๋Ÿผ length๋ฅผ ์ด์šฉํ•ด์„œ argumets์˜ ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function sum() {
  let result = 0;
  for (let i = 0; i < arguments.length; i++) {
    result = result + arguments[i];
  }
  console.log(result);
}
sum(1, 2, 3);

๋ฐฐ์—ด์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— Array method๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

function notArray() {
  arguments.forEach((arg) => console.log(arg));
}
notArray(1, 2, 3);
//  Uncaught TypeError: arguments.forEach is not a function"

Rest parameters

function sum(...args) {
  let result = 0;
  args.forEach((arg) => (result = result + arg));
  console.log(result);
}
sum(1, 2, 3);

์‚ฌ์‹ค ES6์—์„œ ์ƒ๊ธด rest parameter(๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜)๋ฅผ ์ด์šฉํ•˜๋ฉด arguments ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด๋กœ ๋Œ€์ฒดํ•˜๊ธฐ ๋•Œ๋ฌธ์— Array method๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ES6๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ํ™˜๊ฒฝ์ด๊ณ  ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋งŒ์ ธ์•ผ ํ•œ๋‹ค๋ฉด ์•Œ์•„๋‘๋ฉด ์ข‹๊ฒ ์ฃ ?

๋งˆ์น˜๋ฉฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜์—์„œ ์•”์‹œ์  ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” arguments๋ฅผ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด ๋’ค์—์„œ ์„ค๋ช…ํ•  this๋ฅผ ์ค‘์ ์ ์œผ๋กœ ์„ค๋ช…ํ•˜๊ณ ์ž arguments๋Š” ์ข€ ์‚ด์ง ๋ง›๋งŒ ๋ณด๊ณ  ์ง€๋‚˜๊ฐ„ ๋А๋‚Œ์ด์ง€ ์•Š๋‚˜ ์‹ถ์€๋ฐ์š” ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋งŒ์ ธ์•ผ ํ•  ๋•Œ ํ•จ์ˆ˜๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋งŒ ์•Œ๊ณ ๊ฐ€๋„ ํ™œ์šฉ ๊ฐ€์น˜๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„๊นŒ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋ฌธ์„œ

Grow & Glow ยฉ 2025

Banner images by undraw.co