ํด๋น ํฌ์คํ
์ "์ํ์ฝ๋ฉ"์ ์ด๊ณ ์ ๋์ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ๋ฆฐ ๊ฒ์๊ธ ์
๋๋ค.
์์
์ ์ธ ์ฉ๋๊ฐ ์๋, ๊ฐ์ธ ๊ณต๋ถ ์ ๋ฆฌ ๋ชฉ์ ์ผ๋ก ์ฌ๋ฆฌ๋ ๊ธ์์ ๋ฏธ๋ฆฌ ์๋ฆฝ๋๋ค.
arguments
๋ฐฐ์ด๊ณผ ๋น์ทํ์ง๋ง ๋ฐฐ์ด์ด ์๋๋ค, ํจ์์๋ arguments๋ผ๋ ๋ณ์์ ๋ด๊ธด ์จ๊ฒจ์ง ์ ์ฌ ๋ฐฐ์ด์ด ์๋ค.
์ด ๋ฐฐ์ด์๋ ํจ์๋ฅผ ํธ์ถํ ๋ ์
๋ ฅํ ์ธ์๊ฐ ๋ด๊ฒจ์๋ค.
์๋ ์์ ๋ฅผ ๋ณด์. ๊ฒฐ๊ณผ๋ 10์ด๋ค.
<!DOCTYPE html>
<html>
<head>
<title>ํด๋ก์ </title>
</head>
<body>
<script type="text/javascript">
function sum(){
var i, _sum = 0;
for(i = 0; i<arguments.length; i++){
document.write('number : '+i+', value : '+arguments[i]+'<br />');
_sum += arguments[i];
}
return _sum;
}
document.write('result : ' + sum(1,2,3,4));
</script>
</body>
</html>
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋งค์ฐ ๊ด๋ํ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์, ์ธ์์ ์๋ฅผ ๋ง์๋๋ก ์ง์ ํด๋ ์๋ฌ๊ฐ ๋์ง ์๋๋ค.
์ ์์๋ฅผ ์ดํด๋ณด๋ฉด sum()์ ๋งค๊ฐ๋ณ์๊ฐ ์๋๋ฐ, ์ธ์์ ์๊ฐ 4๊ฐ์ด๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ์๋ฌ๊ฐ ๋์ง ์๋๋ค.
์ ์ฝ๋์ arguments๋ผ๋ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฝ์๋ ํน์ํ ๋ณ์์ด๋ค. ์ด ๋ณ์ ์์๋ ์ ์ฌ ๊ฐ์ฒด(์ ์ฌ ๋ฐฐ์ด)์ด ๋ด๊ฒจ์ ธ ์๋ค.
์ด ๋ฐฐ์ด์ ์ญํ ์ ์ฌ์ฉ์๊ฐ ์ ๋ฌํ ์ธ์๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ฆ ์ฌ์ฉ์๊ฐ ์ ๋ฌํ ์ธ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
โผ ์์ธํ ์์๋ณด๊ธฐ.
๋๋ณด๊ธฐ
ํจ์ sum์ ์ธ์๋ก ์ ๋ฌ๋ ๊ฐ์ ๋ชจ๋ ๋ํด์ ๋ฆฌํดํ๋ ํจ์๋ค.
๊ทธ๋ฐ๋ฐ ํจ์ sum์ ์ธ์์ ๋ํ ์ ์๊ฐ ์๋ค.
ํ์ง๋ง ๋ง์ง๋ง ๋ผ์ธ์์๋ 4๊ฐ์ ์ธ์๋ฅผ ํจ์ sum์ผ๋ก ์ ๋ฌํ๊ณ ์๋ค.
ํจ์์ ์ ์๋ถ๋ถ์์ ์ธ์์ ๋ํ ๊ตฌํ์ด ์์์๋ ์ธ์๋ฅผ ์ ๋ฌ์ด ์ด๋ป๊ฒ ๊ฐ๋ฅํ ๊ฒ์ผ๊น?
๊ทธ๊ฒ์ arguments๋ผ๋ ํน์ํ ๋ฐฐ์ด์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. arguments๋ ํจ์์์์ ์ฌ์ฉํ ์ ์๋๋ก ๊ทธ ์ด๋ฆ์ด๋ ํน์ฑ์ด ์ฝ์๋์ด ์๋ ์ผ์ข
์ ๋ฐฐ์ด์ด๋ค. arguments[0]์ ํจ์๋ก ์ ๋ฌ๋ ์ฒซ๋ฒ์งธ ์ธ์๋ฅผ ์์๋ผ ์ ์๋ค.
๋ arguments.length๋ฅผ ์ด์ฉํด์ ํจ์๋ก ์ ๋ฌ๋ ์ธ์์ ๊ฐ์๋ฅผ ์์๋ผ ์๋ ์๋ค. ์ด๋ฌํ ํน์ฑ์ ๋ฐ๋ณต๋ฌธ์ ๊ฒฐํฉํ๋ฉด ํจ์๋ก ์ ๋ฌ๋ ์ธ์์ ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค. ๊ทธ ๊ฐ์ ๋ํด์ ๋ฆฌํดํ๋ฉด ์ธ์๋ก ์ ๋ฌ๋ ๊ฐ์ ๋ํ ์ดํฉ์ ๊ตฌํ๋ ํจ์๋ฅผ ๋ง๋ค ์ ์๋ค.
arguments๋ ์ฌ์ค ๋ฐฐ์ด์ ์๋๋ค. ์ค์ ๋ก๋ arguments ๊ฐ์ฒด์ ์ธ์คํด์ค๋ค.
๋งค๊ฐ๋ณ์์ ์
๋งค๊ฐ๋ณ์์ ๊ด๋ จ๋ ๋๊ฐ์ง ์๊ฐ ์๋ค.
ํ๋๋ ํจ์.length, ๋ค๋ฅธ ํ๋๋ arguments.length์ด๋ค.
arguments.length๋ ํจ์๋ก ์ ๋ฌ๋ ์ค์ ์ธ์์ ์๋ฅผ ์๋ฏธํ๊ณ , ํจ์.length๋ ํจ์์ ์ ์๋ ์ธ์์ ์๋ฅผ ์๋ฏธํ๋ค.
argument.length๋ ์ค์ ๋ก ์ด๋ ํ ํจ์๋ก ์ ์
๋ ์ธ์์ ์ซ์๊ฐ ๋ช๊ฐ์ธ์ง ์์๋ด๋ ๊ฒ์ด๊ณ ,
๊ทธ ํจ์๊ฐ ๋ช๊ฐ์ ์ธ์๋ฅผ ๋ช
์์ ์ผ๋ก ์ ์ํ๊ณ ์๋์ง๋ ์ ์ ์๋ค.
์๋์ ์ฝ๋๋ฅผ ๋ณด์.
<script>
function zero(){
console.log(
'zero.length', zero.length,
'arguments', arguments.length
);
}
function one(arg1){
console.log(
'one.length', one.length,
'arguments', arguments.length
);
}
function two(arg1, arg2){
console.log(
'two.length', two.length,
'arguments', arguments.length
);
}
zero(); // zero.length 0 arguments 0
one('val1', 'val2'); // one.length 1 arguments 2
two('val1'); // two.length 2 arguments 1
</script>
์ ์์์์ ์ค์ํ ๋ถ๋ถ์ one()๋ฅผ ํธ์ถํ๋ ๋ถ๋ถ์ด๋ค.
one.length๋ก ์ถ๋ ฅ์ ํ๋ฉด ๊ทธ ๊ฐ์ 1์ด๊ณ , arguments.length์ ๊ฐ์ 2๊ฐ ๋๋๋ฐ ์ด์ ๋ ์๋์ ๊ฐ๋ค.
one.length ์ฆ ํจ์.length๋ฅผ ํ๊ฒ ๋๋ฉด, ์ด ํจ์๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ ์ํ ๋งค๊ฐ๋ณ์์ ์ซ์๋ฅผ ์๋ ค์ค๋ค.
arguments.length ์ฆ, ๋ช๊ฐ์ ์ธ์๋ฅผ ์ ๋ฌํ์๋๊ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค.
์ด ์ ์์ ๋งค๊ฐ๋ณ์์ ๊ด๋ จ๋ ๋ ๊ฐ์ง ์(ํจ์.length, arguments.length) ์ ์ฐจ์ด๊ฐ ์๋ ๊ฒ!
์ด๋ฌํ ์ฐจ์ด๋ฅผ ํตํด, ๋งค๊ฐ๋ณ์์ ์ ๋ฌ์ธ์์ ์๊ฐ ๋ค๋ฅด๋ฉด ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ๋ฑ์ ์ฝ๋๋ฅผ ์งค ์๊ฐ ์๋ค.