- ベストアンサー
function()とはこれから関数をかきますとい
function()とはこれから関数をかきますという宣言なのでしょうか? doctype宣言のようなイメージでしょうか? $('button’).click(function(){ $(’div.anime’).animation('width','100%'); }) その場合上記は無名関数に当たりますよね。 評価をしていないのになぜ実行されるのでしょうjか? また、function()はあちっこっちで出てきて、この場合は何なんだろうと混乱しませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「function」が関数定義の開始宣言です。 基本的には finction 関数名 ( 引数 ) { ...処理... } と書きます。 JavaScriptの場合、関数名を省略すると無名関数として扱われます。 > 評価をしていないのになぜ実行されるのでしょうjか? 「評価」とはどう言う事を指しているのでしょう? プログラムですから呼ばれたら順に処理を実行するだけです。 「$('button’).click(function(){ ... } 」の場合 jQuery も混ざっているので判りにくいのかもしれませんが、意味としては button 要素で click イベントが発生した場合、click() の引数で渡された関数が呼び出される仕組みです。 関数を渡すルールになっているので、本来なら関数を作って関数名を引数に入れるのですが、他の処理で使い回しをしない処理をわざわざ関数として定義するのは無駄なので、無名関数で渡しているだけです。 JavaScript は他の言語とは少し異なるオブジェクト指向の考え方をしているので、他の言語に慣れていると理解し難い部分がいろいろ出てきます。JavaScript を使いこなそうと思ったらしっかり勉強した方がいいですよ。 > また、function()はあちっこっちで出てきて、この場合は何なんだろうと混乱しませんか? 無名関数はその場限りの処理を定義しているだけですから、あまり深く考える必要は無いんじゃないでしょうか。 単にオブジェクトとして処理を纏める必要があるから無名関数を使っているだけですよ。
その他の回答 (2)
- bya00417
- ベストアンサー率34% (58/170)
> 変数の中にオブジェクトを入れることもできる。 > つまりお互いに入れあえるということですね。 > するとオブジェクトと変数の違いは変数は一つしか入れられない事だけなのですかね? この辺りが JabaScript が他の言語と考え方の異なる点で、変数も実体としてはオブジェクトなので実は同じ物で、単に「型」が違うだけと考えた方が理解しやすいかもしれません。
お礼
型っていうのも難しくてなかなかわかりませんね。 結局オブジェクトと変数は、複数入れられるか入れられないかだけが違うのですね。
- bya00417
- ベストアンサー率34% (58/170)
> function()はあちっこっちで出て来るのですが、すべて無名関数ということでよいのですね。 関数名が書かれていなければ、それは無名関数です。 > click() の引数で渡された関数が呼び出される仕組みです。 JavaScript は全てがオブジェクトであるという考え方の言語なので、無名関数として定義した処理を変数に入れて実行する事ができます。 例えば ========== <script> var fn = function () { alert("OK") ; } fn(); </script> ========== と書くと、fn という変数に無名関数が入り、fn() という形で変数を実行する事が可能になります。 変数もオブジェクトなので無名関数を入れるとインスタンスオブジェクトとして扱えるようになるという仕様になってます。 これを置き換えると ========== <script> function click (fn) { fn(); } click( function () { alert("OK") ; } ); </script> ========== として実行する事が可能になるので、関数の引数に無名関数を渡すことで、呼び出された関数内で渡された無名関数を実行する事ができます。 > ・$('button’).click(function kansuuname(){ ... } > $('button’).click(function kansuuname(){ ... } () > $('button’).click(function (){ ... } () > とjqueryで行っても問題ないのですね。 click() の引数に名前のある関数定義を入れても、基本的には同じ動作をします。 これは ========== <script> var fn = function hoge () { alert("OK") ; } fn(); </script> ========== と書くのと同じで、関数定義をすると同時にその関数のインスタンスを作るので実行可能になります。 ただ、スコープの問題があるので名前を付けても使い回しが出来ないので無駄なだけだと思います。
お礼
関数の引数に関数を入れても問題ない。 変数の中に関数を入れて 変数名();としても呼び出せる。 変数の中にオブジェクトを入れることもできる。 つまりお互いに入れあえるということですね。 するとオブジェクトと変数の違いは変数は一つしか入れられない事だけなのですかね?
お礼
ありがとうございます。 function()はあちっこっちで出て来るのですが、すべて無名関数ということでよいのですね。 関数の実行を評価というと聞きました。 >>> click() の引数で渡された関数が呼び出される仕組みです。 ここがよくわかりませんでした。 初心者にもわかるように具体的に教えていただければ幸いです。 (function(){ ... } 上記引数がclick関数に渡されるということを言っているのですか? ・$('button’).click(function kansuuname(){ ... } $('button’).click(function kansuuname(){ ... } () $('button’).click(function (){ ... } () とjqueryで行っても問題ないのですね。