ํจ์์ ์์์ ํ๋ผ๋ฏธํฐ - arguments
์์์ ํ๋ผ๋ฏธํฐ์ธ arguments์ ๋ํด์ ์์๋ด ๋๋ค.
Jul 10, 2021
ํจ์์ ์์์ ํ๋ผ๋ฏธํฐ๋ 4ํธ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
๋ค์ด๊ฐ๋ฉฐ
์๋ฐ์คํฌ๋ฆฝํธ ํจ์์์ ์์์ ์ธ ํ๋ผ๋ฏธํฐ์ธ 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๋ ์ข ์ด์ง ๋ง๋ง ๋ณด๊ณ ์ง๋๊ฐ ๋๋์ด์ง ์๋ ์ถ์๋ฐ์ ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ๋ง์ ธ์ผ ํ ๋ ํจ์๋ฅผ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๋ค๋ ์ ๋ง ์๊ณ ๊ฐ๋ ํ์ฉ ๊ฐ์น๊ฐ ์ถฉ๋ถํ์ง ์์๊น ํฉ๋๋ค. ์ฝ์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.