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

jqueryについての質問です。

$(function(){
プログラム処理
})();

上記の様なソースをよく目にしますが最後に付いている括弧は何の役目を果たしているのでしょうか?

この括弧がある場合にエラーが発生する時と括弧をつけないとプログラムが動かない時があるので


●質問者: yu3ho7
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Lhankor_Mhy
●34ポイント ベストアンサー

JavaScriptの仕様で、関数呼び出し式の書き方として

【関数】(【引数】)

という書き方があります。つまりカッコ内は引数です。何も入っていないということは、引数を渡さずに関数を呼び出すということです。

良く見る書き方で、即時関数とか呼ばれる書き方があります。

(function(){
 // hogefuga
})()

これも、無名関数を引数なしで実行しているものです。

なぜこんなことをわざわざするかというと、主にクロージャを作るためです(クロージャが分からなければ、別途調べて下さい)。

ちなみに、無名関数をカッコで包んでいるのは、functionで始まると関数呼び出し式ではなくて、関数定義文と解釈されるからです。

なにか、説明が足りないところがあれば再度ご質問ください。

ところで、

$(function(){
 //プログラム処理
})();

たぶん、これは動かないですね。

参考:Under Translation of ECMA-262 3rd Edition


2 ● Cherenkov
●33ポイント

無名関数とごっちゃになってるのかな。

jQueryならこれですよ。

$(function(){
 // Document is ready
});

jQuery(callback) - jQuery 日本語リファレンス


3 ● y-kawaz
●33ポイント

そのコードは何かの間違いじゃないですか?

(function(){
  プログラム処理
})();

$無しで↑このような形なら、プログラム処理を無名関数で定義してその場ですぐに実行するという意味です。何故このような書き方をするかというと「プログラム処理」で利用する変数のスコープを関数内に留める為です。functionで囲わない場合はiやstrなど何かしらの変数を使った際に変数名が被ったりして他のコードに影響を与える可能性があります。無名関数を利用することで他のコードへの影響を最小限(ほぼ無し)にすることができます。


ちなみに$を残して後ろの()を消した以下のような形の場合は、大抵jQueryを利用していて、ページ読み込み完了後に「プログラム処理」を実行するという意味になります。

$(function(){
  プログラム処理
});

これは以下と同じ意味です。

$(document).ready(function(){
  プログラム処理
});

http://q.hatena.ne.jp/answer

関連質問

●質問をもっと探す●



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