javascriptの関数についての質問です。


以下のような関数があるとします。
function func(){ alert("hoge")}

ここで、addEventListenerで上の関数を登録する場合、関数名を指定して行う場合と、同一内容の無名関数を登録する場合があります。
1. obj.addEventListener("load",func,false)
2. obj.addEventListener("load",function(){alert("hoge")},false)

window.setIntervalの場合では、
1. window.setInterval("func()",1000)
2. window.setInterval(function(){alert("hoge")},1000)
という風に、クォーテーションする場合と無名関数を使う場合があります。

代入する場合には、
1. var test = func;
2. var test = func("hoge");
3. var test = function(){ alert("hoge")}
色々な場合があります。

--------------------------------------------

ここで質問なのですが、
1. "func()"
2. func
3. func()
4. function(){}

この4つの違いと、それぞれの呼び方を教えて貰えますでしょうか。回答で教えて頂ければ幸いですが、詳細な解説のあるサイトの紹介、書籍でも十分です。どうぞ宜しくお願い致します。

回答の条件
  • 1人5回まで
  • 登録:2008/12/16 23:36:37
  • 終了:2008/12/17 10:47:32

ベストアンサー

id:van-dine No.1

van-dine回答回数108ベストアンサー獲得回数112008/12/17 00:17:42

ポイント100pt

それぞれ、

1. 「func()」という文字列

2. funcという関数のポインタ

3. funcという関数の戻り値

4. 空の関数オブジェクト(のポインタ)

です。

2と3ですが、

function f(s)
{
  alert(s)
}
g = f;
h = f("hoge");

というスクリプトを書いた時、gには、fの関数のポインタが入るので、

g("hoge")とすればアラートウインドウが出ますが、

hには、(アラートウインドウが出た後)、f("hoge")の返り値

(IEの場合undefined)が返ります。

もちろん、undefinedは関数オブジェクトではないので、

h("hoge")とするとエラーが出ます。

あと、

1. window.setInterval("func()",1000)

2. window.setInterval(function(){alert("hoge")},1000)

ですが、1の文字列"func()"は自動的に関数オブジェクトに変換され、

動作が遅くなる原因になりかねないので、特別な場合以外は2の書き方を心がけましょう。

id:gray-migrant

分かりました!。とても分かり易いです。似た様な表記方法が沢山あって、混乱したまま何となく使っていましたが、腑に落ちました。助かりましたー。

2008/12/17 00:25:28

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません