質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

15551閲覧

$(function(){...}は複数定義する?

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2015/12/16 16:27

jQueryを使う場合、DOMの読み込みを終えた後に実行させるために以下のコードを記述しますが、
規模が大きくなるにつれて、分割したいということもあると思いますが、みなさんどのようにしていますか?
複数定義しますか?それとも1つだけ定義しますか?

また、JSLintを使用している場合、変数の宣言は一箇所で行わないと警告を受けた覚えがありますが、そのあたりの兼ね合いはどうしてますか?

javascript

1$(function(){ 2 // something... 3}

javascript

1$(document).ready(fuction(){ 2// something... 3});

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

私は必要があれば複数定義する派です。

javascript

1$(document).ready(fuction(){ 2// something... 3});

はDOMのロードが完了したときのイベントハンドラなので、
一個のイベントに対して複数ハンドラを定義するという実装に違和感はありません。

tozip様のおっしゃっている

入り口が複数あるよりコードの見通しがいいです。

というご意見もごもっともで、不必要にたくさん定義するのは避けるべきかと思いますが、
論理的に明確にスコープが分けられるなら、個別に定義した方が良い場合もあると思っています。

例えば、bootstrapの"panel"がたくさんあるようなページで、
"panel"ごとに$(document).readyを定義するなどです。
その方が分業もしやすいですしね。

投稿2015/12/16 22:53

TetsuyaZama

総合スコア216

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

あくまで関数"実行"の足がかりが含まれていれば良くて、関数"定義"自体はどこにあってもエラーにはなりません。
このロードを待ってから実行するテクニックは、他のライブラリがきちんと揃っていないとか、HTML要素が画面上にまだ存在しないというエラーを防ぐために行います。

たとえば

javascript

1function foo() { 2 $("body").xxxx().xxxx() 3}

これが実行された瞬間に jQuery がロードされる前だったとか、body がないとかであったとしても、特に問題はありません。
これは「foo関数の定義」という処理で、定義するだけなら中で使っている値はまだ必要ではないからです。

問題となるのは、このあとfoo();を実行するタイミングです。こっちは値がないタイミングだと落ちます。

僕は$(function(){});の中は数行しか書かないことが多いです。
極端な例だと$(init);だけですべての必要な処理が呼ばれるように作ることもあります。
極端というかむしろできるならそうしたほうが、入り口が複数あるよりコードの見通しがいいです。

投稿2015/12/16 17:40

tozjp

総合スコア790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

状況によりけりですが、私は基本的には関数単位で分割します。

JavaScript

1/** 2 * jQuery() タイプ 3 */ 4jQuery(function (jQuery) { 5 'use strict'; 6 function a () {} 7 function b () {} 8 a(); 9 b(); 10}); 11 12/** 13 * 即時関数タイプ 14 */ 15(function (jQuery) { // スコープチェーンの仕組み上、グローバル変数をローカル変数に束縛するとパフォーマンスが上がる 16 'use strict'; 17 function a () {} 18 function b () {} 19 function handleDOMContentLoaded (jQuery) { // スコープチェーンの仕組み上、(同上) 20 a(); 21 b(); 22 } 23 jQuery(handleDOMContentLoaded); 24}).call(this, jQuery); // Strict Mode 用に this 値をグローバルオブジェクトに束縛する

簡易処理で済むなら前者、比較的複雑な処理なら後者というところでしょうか。
this 値や変数束縛できるのは汎用性が高いので後者は良く使います。

Re: makotosawada さん

投稿2015/12/16 23:09

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問