• ベストアンサー

function()とはこれから関数をかきますとい

function()とはこれから関数をかきますという宣言なのでしょうか? doctype宣言のようなイメージでしょうか? $('button’).click(function(){ $(’div.anime’).animation('width','100%'); }) その場合上記は無名関数に当たりますよね。 評価をしていないのになぜ実行されるのでしょうjか? また、function()はあちっこっちで出てきて、この場合は何なんだろうと混乱しませんか?

noname#226032
noname#226032

質問者が選んだベストアンサー

  • ベストアンサー
  • bya00417
  • ベストアンサー率35% (56/158)
回答No.1

「function」が関数定義の開始宣言です。 基本的には finction 関数名 ( 引数 ) { ...処理... } と書きます。 JavaScriptの場合、関数名を省略すると無名関数として扱われます。 > 評価をしていないのになぜ実行されるのでしょうjか? 「評価」とはどう言う事を指しているのでしょう? プログラムですから呼ばれたら順に処理を実行するだけです。 「$('button’).click(function(){ ... } 」の場合 jQuery も混ざっているので判りにくいのかもしれませんが、意味としては button 要素で click イベントが発生した場合、click() の引数で渡された関数が呼び出される仕組みです。 関数を渡すルールになっているので、本来なら関数を作って関数名を引数に入れるのですが、他の処理で使い回しをしない処理をわざわざ関数として定義するのは無駄なので、無名関数で渡しているだけです。 JavaScript は他の言語とは少し異なるオブジェクト指向の考え方をしているので、他の言語に慣れていると理解し難い部分がいろいろ出てきます。JavaScript を使いこなそうと思ったらしっかり勉強した方がいいですよ。 > また、function()はあちっこっちで出てきて、この場合は何なんだろうと混乱しませんか? 無名関数はその場限りの処理を定義しているだけですから、あまり深く考える必要は無いんじゃないでしょうか。 単にオブジェクトとして処理を纏める必要があるから無名関数を使っているだけですよ。

noname#226032
質問者

お礼

ありがとうございます。 function()はあちっこっちで出て来るのですが、すべて無名関数ということでよいのですね。 関数の実行を評価というと聞きました。 >>> click() の引数で渡された関数が呼び出される仕組みです。 ここがよくわかりませんでした。 初心者にもわかるように具体的に教えていただければ幸いです。 (function(){ ... } 上記引数がclick関数に渡されるということを言っているのですか? ・$('button’).click(function kansuuname(){ ... } $('button’).click(function kansuuname(){ ... } () $('button’).click(function (){ ... } () とjqueryで行っても問題ないのですね。

その他の回答 (2)

  • bya00417
  • ベストアンサー率35% (56/158)
回答No.3

> 変数の中にオブジェクトを入れることもできる。 > つまりお互いに入れあえるということですね。 > するとオブジェクトと変数の違いは変数は一つしか入れられない事だけなのですかね? この辺りが JabaScript が他の言語と考え方の異なる点で、変数も実体としてはオブジェクトなので実は同じ物で、単に「型」が違うだけと考えた方が理解しやすいかもしれません。

noname#226032
質問者

お礼

型っていうのも難しくてなかなかわかりませんね。 結局オブジェクトと変数は、複数入れられるか入れられないかだけが違うのですね。

  • bya00417
  • ベストアンサー率35% (56/158)
回答No.2

> 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> ========== と書くのと同じで、関数定義をすると同時にその関数のインスタンスを作るので実行可能になります。 ただ、スコープの問題があるので名前を付けても使い回しが出来ないので無駄なだけだと思います。

noname#226032
質問者

お礼

関数の引数に関数を入れても問題ない。 変数の中に関数を入れて 変数名();としても呼び出せる。 変数の中にオブジェクトを入れることもできる。 つまりお互いに入れあえるということですね。 するとオブジェクトと変数の違いは変数は一つしか入れられない事だけなのですかね?

関連するQ&A

  • function()は無名関数?

    jqueryの$(function() は無名関数だと思いますが、redyが省略されているので、DOMを読み込み終わってから実行とも聞きます。 両方の意味があるのでしょうか? 一見ダダの無名関数に見えますがどのように区別するのでしょうか? 下記の部分もfunction()があるのですがこちらもまた無名関数のなのですか? ただ即時関数ではないので変数などに入れて、関数の呼び出しをしないといけないのにその記載がなくても実行されるのはなぜでしょうか? each(function() $(function() { $(".textbox").each(function(){ var labelText = $(this).val(); $(this).focus(function(){ if( $(this).val() == labelText ){ $(this).val(""); } }).blur(function(){ if( $(this).val() =="" ){ $(this).val(labelText); } }); }); }); 補足 $(".textbox").each(function(){ var labelText = $(this).val(); $(this).focus(function(){ if( $(this).val() == labelText ){ $(this).val(""); の部分は無名関数の中身、つまりこの関数が実行されるときの中身のことなのでしょうか? jqueryだと何となくこの書き方をしているのですがJSの基礎で考えるとそのようになりますよね?

  • function_exists関数の挙動について

    以下のphpのコードを実行すると、 「hogehoge()関数が定義済みです。」とブラウザに表示されます。 ですが、スクリプトは上から下へ向かって実行されるわけで、 <if(function_exists('hogehoge'))>の箇所では、hogehoge関数はそんざいしないのでfalseに なると思うのです。 いったいどういう理屈なんでしょうか? よろしくお願い申し上げます。 (なお、下記ソースではタブを全角空白4文字に変換しています) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>関数が定義済みか調べる</title> </head> <body> <div> <?php if(function_exists('hogehoge')){     echo 'hogehoge()関数が定義済みです。'; }else{     echo 'hogehoge()関数は未定義です。'; } function hogehoge(){} ?> </div> </body> </html>

    • ベストアンサー
    • PHP
  • javascript関数宣言に;をつけてもよいの?

    javascriptの関数宣言について。 あるjavascriptの本に関数宣言と名前付き関数、無名関数についてかいてありました。 これらの違いは最後が;でおわっているかどうかとかいてありました。 関数宣言では;はつけない。 つまり、 function foo() { //関数本体の記述 } なので;はいらず、名前付き関数と無名関数は;は必要というのはわかります。 が、別の本では、 function test() { var el = document.getElementById('mydiv'), ch = el.childNodes, len = ch.length, name = ''; for ( var count = 0; count < len; count++) { name = ch[conun].nodeName; } return name; }; と、セミコロンが最後に記述されていました。 いままで、関数宣言にはセミコロンをつけずにかいていたので、 関数宣言にセミコロンが記述されていておどろきました。 ながくなりましたが、関数宣言には、セミコロンはつけてもよいのでしょうか?

  • 引数付きで呼び出す関数・配列・name(id)のつけ方・・・?

    引数付きで呼び出す関数・配列・name(id)のつけ方・・・? 何を質問したいのかわからないタイトルになってしまいましたが とりあえず下のソースコードを見てください(実行してください)。 <html> <head><title>up</title> <script language="JavaScript"> <!-- num=new Array("5","5"); str=new Array("*****","*****"); function up(j) { num[j]++; str[j]+="*"; text[j].innerHTML=num[j]+str[j]; } //--> </script> </head> <body> <input type="button" value="1" onClick="up(0)"><div id="text1">5*****</div><br> <input type="button" value="2" onClick="up(1)"><div id="text2">5*****</div> </body> </html> 1のボタンを押すと上の文字列が反応し、2のボタンを押すと 下の文字列が反応するプログラムを書きたいのですが、どっちの ボタンを押して関数が呼び出され、どっちの文字列に処理を するか区別することができません、どうしたらよいのでしょうか? 下のようにひとつの時はできました・・・。でもふたつの時は どうしたらいいのかわかりません。 <html> <head><title>up</title> <script language="JavaScript"> <!-- num=5; str="*****"; function up() { num++; str+="*"; text1.innerHTML=num+str; } //--> </script> </head> <body> <input type="button" value="1" onClick="up()"><div id="text1">5*****</div> </body> </html>

  • 即時関数で

    即時関数(無名関数)でsetTimeoutを繰り返す方法はありますでしょうか?setIntervalではなく。 var testDo=function(){ setTimeout(function(){ 何かの処理 testDo(); //★実行されない },600); }(); //即時関数 即時なのでtestDoという名前も不要だと思いますが。。。 よろしくお願いします。

  • 関数を呼んだら、その中の関数も自動実行される?

    ・関数の実行タイミングが分からないので教えてください ・下記で、どうして引数が渡るのでしょうか? ・portal関数を呼んだら、gooプロパティに無名関数が格納される(?)と思うのですが、=関数実行になるのでしょうか? ・無名関数だから? var obj = {  portal : function( arg ) {   var goo = function(arg){    console.log(arg);   }(arg);  } } obj.portal("あ"); ・自分的には、portal関数を呼んで変数gooに無名関数を格納(?)した後、明示的にgoo();と呼ぶ必要があると思うのですが… ・下記でTypeErrorエラーになるのは、gooプロパティが2回呼ばれるから? ・明示的に呼んだ2回目は引数が渡らないから? var obj = {  portal : function( arg ) {   var goo = function(arg){    console.log(arg);   }(arg);   goo();  } } obj.portal("あ"); //TypeError: undefined is not a function

  • onClickに複数の関数を挿入する方法

    初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。 クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。 通常はこのような設定はしないものなのでしょうか? 教えてください。 よろしくお願いします。 <INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。 <INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

  • クリックファンクションがうまくいかない

    クラス名drawermenuをクリックしたときにドロワーメニューが出たり消えたりする作りなのですが、リストの中にグーグルサイト内検索を入れたところ検索しようと検索ボックスを選択するとドロワーメニューが消えてしまいます。 親divについていると子にある要素をクリックしても親をクリックしたことになってしまうのでしょうか? そうであれば検索ボックスを選択した時だけ実行されないようにするにはどうしたらよいのでしょうか?jqueryを使っています。 <nav> <div id="js-drawermenu-button-animation" class="drawermenu"> <ul> <li class="drawermenu__item"> </li> <li class="drawermenu__item"> <form action="http://www.google.co.jp/cse" id="cse-search-box" target="_blank"> <div> <input type="hidden" name="cx" value="" /> <input type="hidden" name="ie" value="UTF-8" /> <input type="text" name="q" size="55" /> <input type="submit" name="sa" value="検索" /> </div> </form> <script type="text/javascript" src="http://www.google.co.jp/coop/cse/brand?form=cse-search-box&lang..."></script> </li> </ul> </div> </nav> js $(function(){ $('.modal-button-wrap, .drawermenu').on('click', function() { $('.drawermenu').toggleClass('showmenue'); }); });

  • 無名関数を使うメリットは何ですか?

    Javascriptに限らず、多くのプログラム言語で無名関数が使えると思います。以下の2つの記述法は、挙動に違いは全くありませんよね? function func() { return "普通の関数です。"; } var func = function() { return "無名関数です。"; } なぜ無名関数を使うのか調べてみたところ、「最近Ajaxが流行ってきてライブラリを使う機会が増えてきた。それらを利用する際、関数の名前が重複して誤作動するのを防げる」という答えを見つけました。しかし試してみたところ var func = function() { return "無名関数1です。"; } var func = function() { return "無名関数2です。"; } alert(func()); のように名前が被った場合、従来と同じで後に書かれた関数が動作します。イベント駆動型関数を無名関数にするメリットは分かります。たとえば window.onload = function() { alert("ウィンドウの読み込みが完了しました。"); } と書けば、他の関数との衝突によってこの関数が動作しないことはありません(ライブラリを使ってwindow.onloadが重複してしまったら別問題ですが)。 結局のところ、無名関数を使うメリットは何なのでしょうか?

  • borderの箇所をマウスでクリック

    cssでborderを指定し ajaxで枠内、枠外では何も動作しないが borderの箇所をマウスでクリックした場合のみ 動ささせるにはどのようにすればいいでしょうか。 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> $(document).ready(function () { $("div.button").mousedown(function () { $("div#message").text("マウスのボタンが押されました。"); }) $("div.button").mouseup(function () { $("div#message").text("マウスのボタンがはなされました。"); }) }) </script> <style> .button { border: solid 1px #0094ff; background-color: #e1e1e1; width: 200px; height: 32px; } </style> </head> <body> <div class="button">枠</div> <div id="message"></div> </body> </html>

    • ベストアンサー
    • AJAX

専門家に質問してみよう