以下のような関数があるとします。
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. 「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の書き方を心がけましょう。
分かりました!。とても分かり易いです。似た様な表記方法が沢山あって、混乱したまま何となく使っていましたが、腑に落ちました。助かりましたー。