jQueryの実行順番と丸括弧の意味について

このQ&Aのポイント
  • jQueryの実行順番と丸括弧の意味について説明します。
  • 上記の処理では、jQuery1.7.1をロードして後、jQuery1.2.3をロードしていますが、(1)のところで、jQuery1.7.1を保持し、(2)で再び$とjQuery変数にロードしているため(3)のところで、'1.7.1'と表示されます。
  • クロージャーなどで、(function(){})() と記述しますが、function(){}を式として認識させるために丸括弧で囲っているのは、関数を即時に実行するためです。今回の処理でも同様の意味を持っています。
回答を見る
  • ベストアンサー

実行の順番を教えて下さい。

---------------------------------------------------------------------------------------------------------------- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script type="text/javascript"> ( tmp_jquery=jQuery ・・・(1) )( function(){ $=jQuery=tmp_jquery; ・・・(2) } ); </script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> <script> $(function(){ alert(jQuery.fn.jquery); ・・・(3) }); </script> ---------------------------------------------------------------------------------------------------------------- 上記の処理では、jQuery1.7.1をロードして後、jQuery1.2.3をロードしていますが、 (1)のところで、jQuery1.7.1を保持し、 (2)で再び$とjQuery変数にロードしているため (3)のところで、"1.7.1"と表示されます。 さて、ここで(2)の部分がいつ実行されるのかが理解できません。 そもそも、今回の処理で記述されている ()() の意味がわかりません。 クロージャーなどで、 (function(){})() と記述しますが、 function(){}を式として認識させるために丸括弧で囲っているのは、 以下のサイトで知りました。 http://d.hatena.ne.jp/amachang/20080208/1202448348 今回も同様の意味なのでしょうか? だとすれば、(1)の前に(2)が実行されそうなのですが・・・。 どなたか、ご説明お願いできないでしょうか?

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

  • ベストアンサー
  • dscripty
  • ベストアンサー率51% (166/325)
回答No.2

[ANo.1] の補足への回答ね。 > $()で囲まれていれば DOMが完成したときと理解できるのですが、 > 囲まれていないのに、DOMが完成したときに呼 > ばれるのはなぜなのでしょうか?? 『$() 囲んである関数は、DOM が完成したときによばれる。』 ではなくて。 『jQuery オブジェクト() で囲んである関数は、DOM が完成したときによばれる。』 だから $(関数); //と書いても jQuery(関数); //と書いても (tmp_jquery=jQuery)(関数); //と書いても DOM が完成したときに関数がよばれる。 という説明でよさそう?

1qaz_2wsx
質問者

お礼

なるほど、そう言うことだったんですね! ガッテンしました。 詳細な説明ありがとうございました。 感謝しています。

その他の回答 (1)

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.1

前提 - 式は評価後すぐ実行される - 関数は評価後、関数を呼び出す式が評価されて初めて実行される - 関数を呼び出す式の評価は、始めに引数が評価されて   そのあと関数の中の式が順に評価される。 - $(関数); と jQuery(関数); は   $(document).bind("ready", 関数); の簡略構文で、   この機能は document の DOM が完成したときに   「関数」が呼び出されるように予約しておくというもの。   つまり $(関数); の関数はその時点では評価されるだけで、   呼び出されるのは document の DOM が完成したとき。 下のコードの中の左端にある「(数字).」は評価順序。 1...<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> ....<script type="text/javascript"> 4...( 4.2.  tmp_jquery=jQuery;// ……(1) 4...)( 4.3.  function(){ 4.3.    $=jQuery=tmp_jquery;// ……(2) 4.3.  } 4...); ....</script> 5...<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> ....<script> 7...$( 7.6.  function(){ 7.6.    alert(jQuery.fn.jquery);// ……(3) 7.6.  } 7...); ....</script> 机上デバッグ開始。 1.で jQuery や $ が jQuery 1.7.1 へ。 2.は式なのですぐ実行される。tmp_jquery は jQuery 1.7.1 3.は 4.(関数を呼び出す式) の引数なので、すぐに評価されるけれど、関数なので呼び出されるまで実行されない。呼び出されるのは DOM が完成したとき。 5.で jQuery や $ が jQuery 1.2.3 へ。 6.は 7.(関数を呼び出す式) の引数なので、すぐに評価されるけれど、関数なので呼び出されるまで実行されない。呼び出されるのは DOM が完成したとき。 (HTML が最後まで読み込まれて DOM が完成する) 3.が呼び出されて ……(2) が評価される。式なのですぐに実行されて $ と jQuery は jQuery 1.7.1 6.が呼び出されて ……(3) が評価される。alert 関数を呼び出して jQuery 1.7.1 の jQuery.fn.jquery が表示される。 机上デバッグ終了。

1qaz_2wsx
質問者

お礼

詳細な説明ありがとうございます。

1qaz_2wsx
質問者

補足

詳細な解説ありがとうございます。 ただ、3.が実行されるのが「DOMが完成したとき。」と言うのが 理解できません。 例えば、 (式)(function(){$=jQuery=tmp_jquery;}); が (式)($(function(){$=jQuery=tmp_jquery;}));のように $()で囲まれていれば DOMが完成したときと理解できるのですが、 囲まれていないのに、DOMが完成したときに呼ばれるのはなぜなのでしょうか?? 実行時の挙動を見ると説明して頂いたとおりだと思います。 ただ、私頭が弱いので、どうしても納得できないのです・・・。 ごめんなさい。

関連するQ&A

  • 複数jQueryの配置で干渉 設置位置

    Javascript事は全くわかりませんが、色々なプラグインとしてjQueryを利用しています。 ----------------- jQueryに干渉があったようで、正常に動作させたいのですが、疑問があります。 1サイト目(HTML 最下部に配置) <script src="vendor/jquery.min.js" type="text/javascript"></script> <script src="js/layout.min.js" type="text/javascript"></script> 正常に動作します。 2サイト目(HTML head内に配置) <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="js/abcd.js" type="text/javascript"></script> 正常に動作します。 上記の2サイトを合体させた:(HTML 最下部に配置) <script src="vendor/jquery.min.js" type="text/javascript"></script> <script src="js/layout.min.js" type="text/javascript"></script> <script src="js/abcd.js" type="text/javascript"></script> すると、 layout.min.jsに不具合がでるようです・・・ <script src="vendor/jquery.min.js" type="text/javascript"></script> <script src="js/layout.min.js" type="text/javascript"></script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="js/abcd.js" type="text/javascript"></script> でも、ダメです。 <script src="vendor/jquery.min.js" type="text/javascript"></script> を <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> に変更してもダメでした。 tel.js内を、 jQuery.noConflict(); (function($) { $(function(){ を $j に変えたり、 jQuery に 書き替えてもダメでした・・・ そこで、以下のように移動しましたら動作しました。 (HTML header内に配置) <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script src="js/abcd.js" type="text/javascript"></script> (HTML 最下部に配置) <script src="vendor/jquery.min.js" type="text/javascript"></script> <script src="js/layout.min.js" type="text/javascript"></script> 上記のように、 HTML head部と、HTML 最下部に分けるのは、正しい方法なのでしょうか?

  • <hoge />と<hoge></hoge>の違い

    現在jQueryを使ったプログラムをしていて、気になった点があったので質問させていただきました。 具体的には <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" charset="utf-8"/> <script type="text/javascript"> function show() { } </script> こんなソースを書いていましたが、showメソッドが認識されていませんでした。 そこで <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" charset="utf-8"></script> とかくと、後ろのメソッドも認識されました。 ここで疑問なのは</>と</script>の違いです。 この2つは何がちがうのでしょうか?

  • これはどういう意味のコードですか?

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" charset="shift_jis"></script> これはどういう意味のコードですか? 私のサイトに入ってるコードですが意味が分からないまま使っています。 サイト内でjqueryで検索機能はつけていますが ネットから拾ってきたものを組み合わせたものであり、 意味は分かっていません。 src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" の意味だけ教えていただけませんか? jqueryを使う上での宣言みたいなものでしょうか?

  • 同HTML内で複数のjQueryを設置する方法

    Movable Type5で作製しています。 複数のjQueryを使用し、(A)はヘッダーにメニュー、(B)はコメントフォームにテキストをうっすらと出すプラグインを適用させようとしています。 それぞれ単品では問題なく作動するのですが、下記のように記述するとBのみが作動する状態です。 jQueryもjsもよくわからない素人なのでわかりやすくご説明を頂けるとありがたいです。 使用しているものは以下です。 ---------------------------------------- <script type="text/javascript" src="<$mt:Link template="javascript"$>"></script> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.3");</script> <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js'></script> <script type="text/javascript"> var $ = jQuery = jQuery.noConflict().extend(true, $); … </script> <script type="text/javascript" src="<$mt:BlogURL$>js/jquery.updnWatermark.js"></script> <script type="text/javascript"> jQuery(document).ready(function($) { $.updnWatermark.attachAll(); }); </script> <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js'></script> <script type="text/javascript" src="<$mt:Link template="javascript"$>"></script> <script type="text/javascript" src="<$mt:Link>index/js/jquery-1.1.3.1.min.js"></script> <script type="text/javascript" src="<$mt:Link>index/js/jquery.easing.min.js"></script> <script type="text/javascript" src="<$mt:Link>index/js/jquery.lavalamp.min.js"></script> <script type="text/javascript"> $(function() { $("#1, #2, #3").lavaLamp({ fx: "backout", speed: 800, click: function(event, menuItem) { return true; } }); }); </script> http://okwave.jp/qa/q6602248.html ↑に質問をされた方のは見たのですが、それでもわかりません(同様の質問なのかも不明ですが・・・) 本当にわからないので、宜しくお願いします。

  • jquery3系がうまくいかない

    jquery3系が出ていたので使ってみたのですが、CDNはうまくいったのですが、そのものをダウンロードして使うほうがうまくいきません。 https://code.jquery.com/jquery-3.1.1.min.js のソースコードをコピペしてjquery-3.1.1.min.jsというファイルを自分で作って下記のようにしているのですが、CDNが読み込まれなかった場合に読み込むというやり方のようです。 <!-- start load jquery --> <!--[if lt IE 9]> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="/js/jquery-1.11.0.min.js"><\/script>')</script> <![endif]--> <!--[if gte IE 9]><!--> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="/js/jquery-3.1.1.min.js"><\/script>')</script> <!--<![endif]--> <!-- end load jquery --> ・もちろん下記のようにもしましたが駄目でした。 <!-- start load jquery --> <!--[if lt IE 9]> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script>window.jQuery || document.write('<script src="/js/jquery-1.11.0.min.js"><\/script>')</script> <![endif]--> <!--[if gte IE 9]><!--> <script>window.jQuery || document.write('<script src="/js/jquery-3.1.1.min.js"><\/script>')</script> <!--<![endif]--> <!-- end load jquery -->

  • スクレイピングした内容をvalue値に入れたい

    下記のようなページがあります。 ++++++++++++++++++++++++++++++++++++++++++ 【http://hoge.ne.jp/index.html】 <html> <table border="1"> <tbody> <tr> <td class="class3">東京</td> </tr> </tbody> </table> </html> ++++++++++++++++++++++++++++++++++++++++++ 【出来たこと】 上記の東京という文字を抜き出すスクレイピングページを作りました。 ****************************************** 【http://hogehoge.com/index.html】 <html> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script type="text/javascript" src="./js/jquery.xdomainajax.js"></script> <script> url = 'http://hoge.ne.jp/index.html'; $.get(url, function(data){ var content4 = $(data.responseText).find('.class3').text(); $("#text4").text(content4); }); </script> <div id="text4"></div> </html> 結果 → 東京 ************************************** 【出来なかったこと】 これを、<input type="text" name="tx" value="東京"> のような形でフォーム内に取り入れることを考えています。 しかしながら、下記のようにうまくいきません。 ●●だめ その1●● <html> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script type="text/javascript" src="./js/jquery.xdomainajax.js"></script> <script> url = 'http://hoge.ne.jp/index.html'; $.get(url, function(data){ var content4 = $(data.responseText).find('.class3').text(); $("#text4").text(content4); }); </script> <input type="text" name="tx" value="<div id='text4'></div>"> </html> 結果 → 表示されず ●●だめ その2●● <html> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script type="text/javascript" src="./js/jquery.xdomainajax.js"></script> <script> url = 'http://hoge.ne.jp/index.html'; $.get(url, function(data){ var content4 = $(data.responseText).find('.class3').text(); $("#text4").text(content4); }); var tx4 = content4; document.write("<input type='text' name='tx' value='" + tx4 + "' />"); </script> </html> 結果 → 表示されず 【お願いしたいこと】 <input type="text" name="tx" value="東京">の形で表示させる方法についてアドバイスいただきたくお願いいたします。

  • RSSでアメブロの画像をサイトに表示させたい

    自社サイトにquery.zrssfeed.min.jsを使ってアメブロの画像を表示させたいと考えております。 下記のソースコードですが、サイトに表示されません。 正常に表示できるよう教示頂けますでしょうか <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script><script type="text/javascript" src="js/jquery.zrssfeed.min.js"></script> <script type="text/javascript">// <![CDATA[ $(document).ready(function () { $('#rss').rssfeed('http://rssblog.ameba.jp/creamg/rss.html',{ snippet: false }, function(e) { $(e).find('div.rssBody').vTicker({ showItems: 3 }); }); }); // ]]></script> <div id="rss"> </div>

  • jQueryが動きません。

    表題のとおりです。 fademover(http://www.detelu.com/fademover/)を動かそうと思って 導入しても動いてくれません。 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script src="jquery.fademover.js"></script> <script> $(function(){ $('body').fadeMover({'effectType': 2,'inSpeed': 5000}); }); </script> の部分。 Chromeだと Uncaught TypeError: Object [object Object] has no method 'fadeMover' index.html:14 (anonymous function) index.html:14 n ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js:2 o.fireWith ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js:2 e.extend.ready ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js:2 c.addEventListener.B Safariだと TypeError: 'undefined' is not a function (evaluating '$('body').fadeMover({'effectType': 2,'inSpeed': 5000})') と出ます。 jsやjqueryはあまりいじったことないので 手が出ない状態です。 よろしくお願いします。

  • google apiの使用方法

    jQueryとgoogleマップのapiを同時に使用する方法を教えていただきたいと思います。 両方を使用するとカスタマイズしたgoogleマップは表示されますが、jQueryに不具合が起きます。 同時に使用する方法はないでしょうか。 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type='text/javascript' charset='utf-8' src='http://maps.googleapis.com/maps/api/js?&sensor=false'></script> 他に必要なことがあれば提示しますのでよろしくお願いします。

    • 締切済み
    • CSS
  • jQueryと他のライブラリを同時に使用する方法

    すみません。 似たような質問あるかもしれません。 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js"></script> <script type="text/javascript" src="ppgallery/js/ppgallery.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#gallery').ppGallery({ showHiddenGalleryButton: '#view' //hide the gallery and assign a button (using it's id) that will execute the hidden gallery. Don't forget to make your button and give it an id }); }); </script> <link href="css/service.css" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $(function() { $("h1").append('<em></em>') $(".thumbs a").click(function() { var largePath = $(this).attr("href"); var largeAlt = $(this).attr("title"); $(".largeImage").attr({ src: largePath, alt: largeAlt }); $("h1 em").html(" (" + largeAlt + ")"); return false; }); }); </script> という具合で、 ppgalleryとjavascriptの2つまではギャラリー入れることが出来たのですが。 この2つの間に、Lightboxを入れたいのですが、 Lightboxを入れるとどうしても、ppgalleryが作動しなくなるのですが、 http://stacktrace.jp/jquery/with_other_lib.html#other_version など見るのですがなにぶん、修行が足りなく、 僕には理解がきちんと出来ません。 お願い致します。 どなたか、Lightboxを作動できるようご教授ください。

専門家に質問してみよう