人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: gray-migrant
●カテゴリ:ウェブ制作
✍キーワード:hoge JavaScript test サイト 書籍
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● van-dine
●100ポイント ベストアンサー

それぞれ、

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の書き方を心がけましょう。

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ