アプリ版:「スタンプのみでお礼する」機能のリリースについて

とほほのjavascriptで勉強しています。
http://www.tohoho-web.com/js/function.htm#objFun …

ここの
function goukei() {
var ans = 0;
for (i = 0; i < goukei.arguments.length; i++) {
ans += goukei.arguments[i];
}
return(ans);
}
sum = goukei(1, 2, 3, 4, 5);

goukei関数を定義したときの引数は、なしなのに
goukei関数を呼び出すとき、goukei(1, 2, 3, 4, 5)と、このように5つも引数を指定しています。
Javaでは、こんな呼び出し方をすれば、コンパイルエラーになりますよね。

javascriptでは、引数なしで関数を宣言しても、呼び出すときに、好きな個数の引数を渡せるのですか?

「javascript 引数 省略」とか、「javascript 引数なし」とかいろいろググッてみたのですが
肝心の、javascriptでは引数なしにして宣言しても、呼び出すとき、好きな個数の引数つけて呼び出しても大丈夫。みたいな、確認したい記述はみつかりませんでした。

javascriptでは、このような書き方もできるということでしょうか。

A 回答 (3件)

できます



JavaScriptでは関数の引数は
arguments
というオブジェクトに格納されます

つまり
function aaa( a0, a1) {
とした場合、常に
a0 == arguments[0]
a1 == arguments[1]
が成り立ちます
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

関数の定義の引数の個数と、関数を呼び出す際の引数の個数が一致しないのは
javascriptではOKなんですね。

なんて簡便なんだろう。
引数がargumentsオブジェクトに格納されるという仕組みになっているのですね。
飲み込めました。

お礼日時:2012/06/07 19:10

argumentsは慣れないと分かりづらいですね


きちんとかくとこんな感じです

<script>
window.goukei=function(){
var ans = 0;
var obj=arguments.callee;
for (var i = 0; i < obj.arguments.length; i++) {
ans += obj.arguments[i];
}
return(ans);
}
var sum = goukei(1, 2, 3, 4, 5);
alert(sum);
</script>
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

今はまだjavascriptは未熟なので、提示してくださったコードを完全に理解
できないのですが、わかるようになるように、がんばろうと思います。

javascriptひととおり、飲み込んでから、再度、コードを読んでみます。

お礼日時:2012/06/07 19:15

JavaScriptは引数をチェックしてくれない仕様になっています。



しかし、"arguments"というオブジェクト?があり、
これにより引数を管理する事ができます。

で、例題の場合は可変引数(引数で渡す値の数が自由に変えられる)のもので、
引数分だけループして合計すると言うものです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

定義する側と、呼び出す側が一致していなくても、きちんとブラウザで実行されるので
あれ?と思ったら、そういうことだったんですね。

関数呼び出しで渡す引数の個数を、いろいろ変えられたら便利なんでしょうね。
今は、まだ未熟なので使いこなせないけど。

お礼日時:2012/06/07 19:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!