みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JavaScriptの$は文字以外にも意味がある?

JavaScriptでは、$は、単なる文字として扱う。というのは調べてわかったのですが、
以下のプログラムの意味がわかりません。

◆疑問1
「$を変数として宣言している」とすれば、以下のプログラムの始まりは var $ = ~~~
のようになりますよね?

◆疑問2
3行目あたりに出てくる「$.ajax(」のような記述は、変数$の、下の階層のなんらかのオブジェクト?なのかと思いましたが、$が何かのクラスであったり構造像体である旨は、どこにも宣言されていないので、変数ではない何かかのでしょうか??

◆疑問3
いろんなところに、function()とあるのは、なぜなのですか?
無名関数?とかいうのがあるということはどこかで知りました。
が、
(1)下のプログラムでは、何回もfunction()として、処理を記述していますが、
何の意味があるのでしょうか?
function(){
 処理内容;
},
と書くくらいなら、最初から無名関数としてくくらなくても、良くないですか?
むしろ、無駄な文字数が増えるし、しかもわかりにくいように思いますが、この記載にメリットはあるのでしょうか?

$(
 function(){
  $.ajax(
   {
    url: "doctors/data.xml",
    dataType: 'xml',
    timeout: 1000,

    error: function(){
     alert("xmlファイルの読み込みに失敗しました");
    },

    success: function (data){
     $(data).find("item").each(function(){
      if($(this).attr("val") == "new"){
       $("ul.column").append('value=test');
      }
     });
    }
   }
  );
  $("li.noJavaScript").remove();
 }
);

投稿日時 - 2013-02-11 21:41:19

QNo.7940549

困ってます

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

根本的なところで、錯覚してしまっていると思います。JavaScriptそのものには、$というオブジェクトはありません。

このコードは、単なるJavaScriptではなくて、jQueryというJavaScriptライブラリを利用したコードです。$は、このjQueryというライブラリに用意されているものです。これは、HTMLから必要な要素を指定し操作するための機能を提供するもので、一度慣れるとjQueryなしのコードは書く気がしなくなるほどに便利であるため、非常に広く普及しています。


◆疑問1
「$を変数として宣言している」とすれば、以下のプログラムの始まりは var $ = ~~~
のようになりますよね?

ライブラリ内で既に$は定義されているため、実際に書くコードにはそのような文はありません。


◆疑問2
3行目あたりに出てくる「$.ajax(」のような記述は、変数$の、下の階層のなんらかのオブジェクト?なのかと思いましたが、$が何かのクラスであったり構造像体である旨は、どこにも宣言されていないので、変数ではない何かかのでしょうか??

$は関数でありオブジェクトでもあります。JavaScriptでは、関数もオブジェクトであり、自身の中にプロパティとして更に関数やオブジェクトを保管できます。$はそうしたものです。ajaxは、$内にあるメソッドです。


◆疑問3
いろんなところに、function()とあるのは、なぜなのですか?
無名関数?とかいうのがあるということはどこかで知りました。
が、
(1)下のプログラムでは、何回もfunction()として、処理を記述していますが、
何の意味があるのでしょうか?
function(){
 処理内容;
},
と書くくらいなら、最初から無名関数としてくくらなくても、良くないですか?
むしろ、無駄な文字数が増えるし、しかもわかりにくいように思いますが、この記載にメリットはあるのでしょうか?

これは、jQuery特有の書き方です。$そのものがjQueryオブジェクトであるため、$(function……)と記述することで、jQueryの引数に関数オブジェクトを引き渡す役割を果たしています。このあたりは、jQueryライブラリについて理解しないとちょっとわかりにくいと思います。いずれにせよ、JavaScriptでそういう書き方に何かの意味があるというのではなくて、使っているjQueryライブラリで「こうやって書くとこう働きます」と定義されている決まりに従って書いている、と考えてください。

投稿日時 - 2013-02-11 22:09:22

お礼

ありがとうございます!
自分が、どういうところがわかってなさそうなのか?を汲み取って頂いた回答、とてもわかりやすかったです!

JQueryのライブラリは眺めて見ようと思います。

投稿日時 - 2013-02-13 08:46:28

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

◆回答1
そのコードにないだけでどこかにあります
でないと動きません

◆回答2
そのコードにないだけでどこかにあります
でないと動きません

◆回答3
よく前後を見ましょう
その関数を関数に渡してるのです

投稿日時 - 2013-02-12 01:28:43

お礼

ありがとうございます。
(3)は、関数の結果を、上の階層の関数の引数にすることはよくありますが、短い処理なら関数として宣言する必要がないのかな?とう疑問でした。

投稿日時 - 2013-02-13 08:36:55

ANo.2

> 「$を変数として宣言している」とすれば、以下のプログラムの始まりは var $ = ~~~
のようになりますよね?
あなたが気づいていないだけで別の所(ライブラリの中とか)で $ が定義されているはずです。

> (1)下のプログラムでは、何回もfunction()として、処理を記述していますが、
> 何の意味があるのでしょうか?
> function(){
>  処理内容;
>},
関数オブジェクトにしないと「処理内容」をオブジェクト(データ)として扱えません。
例えば、
 var a = function(){ /*処理内容*/ };
 a();
みたいに変数に「処理内容」を格納するには関数オブジェクトが必要です。
また、関数の引数に渡したい場合も同様です。

あなたが提示しているソースコードでは、
errorプロパティやsuccessプロパティに関数オブジェクトが格納されることになりますし、
each関数の第一引数にも関数オブジェクトが渡されます。
(これ自体は別にjQuery特有の書き方というわけでもないです。)

投稿日時 - 2013-02-11 23:16:05

お礼

ありがとうございます!
どうも私は関数オブジェクトというのがわかっていないようです。

var a =function(・・・
のa側は、呼び元側だけで使えるローカル変数と認識していました。
調べてみますー

投稿日時 - 2013-02-13 08:41:38

あなたにオススメの質問