jqueryについての質問です。


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

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

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

回答の条件
  • URL必須
  • 1人5回まで
  • 13歳以上
  • 登録:2011/09/21 13:01:57
  • 終了:2011/09/28 13:05:03

ベストアンサー

id:Lhankor_Mhy No.1

Lhankor_Mhy回答回数779ベストアンサー獲得回数2312011/09/21 13:56:35

ポイント34pt

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

 【関数】(【引数】)

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

 

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

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

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

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

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

 

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

 

 

 

 ところで、

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

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

 

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

その他の回答(2件)

id:Lhankor_Mhy No.1

Lhankor_Mhy回答回数779ベストアンサー獲得回数2312011/09/21 13:56:35ここでベストアンサー

ポイント34pt

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

 【関数】(【引数】)

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

 

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

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

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

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

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

 

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

 

 

 

 ところで、

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

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

 

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

id:Cherenkov No.2

Cherenkov回答回数1503ベストアンサー獲得回数4932011/09/21 15:02:32

ポイント33pt

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

jQueryならこれですよ。

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

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

id:y-kawaz No.3

y-kawaz回答回数1421ベストアンサー獲得回数2262011/09/21 15:04:04

ポイント33pt

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

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

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


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

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

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

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません