• ベストアンサー

オブジェクトの中で呼び出される順番とデフォ引数?

・意味が分からないコードがあるので教えてください ■コード var arg; var obj = {  hoge : function( arg ) {   var hoge = function(arg){    return function() {    }   }(arg);   hoge();  } } ■質問 ・この時、obj.hoge(arg);と書いたら、どういう処理が走るのでしょうか? ・初めに実行されるのは? 無名関数部分? それともhoge()? ・hoge()を実行する際、引数指定していないので、引数は渡らない?

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

hogeが2種類使われているので、説明上の区別がし難いですが… obj.hoge()が呼ばれると、objのhogeメソッドが実行されます。 hogeメソッドは内部変数hogeに(argの値に従って)関数をセットし、その関数(hoge)を実行します。 引数は、内部変数hogeを定義する際に参照可能なので、間接的にはhogeでもargの値を参照できます。 (参照するかしないかは、関数の作成方法や結果によります) それなので、最初にobj.hogeメソッドが実行され、その処理中で新たに定義された hoge()が実行されるという順になります。。 例えば、単純に   return function(){ alert(arg); } などとなっていれば、引数argの値がalertされるはずです。 (ただし、この場合はこんな記述方法をする必要はまったくありませんが…) あるいは、  if(arg>0) return function(){ ○○○○ };   else return function(){ ×××× }; みたいにすれば、argの値によって実行する関数が切替わるイメージになります。 メソッドの処理中でargの値によって処理を変えれば、「関数を定義して実行する」ようなことはしなくても、内容的に同じ処理を行なうことは可能です。 内部の変数hogeの名称を変えてあげれば、少し理解しやすくなるのではないでしょうか。

re97
質問者

お礼

回答ありがとうございました。 >内部の変数hogeの名称を変えてあげれば、少し理解しやすくなるのではないでしょうか ・そうですよね ・もしかしてjavascript的に何か特別な意味があるのかもしれない、と思い質問してみたのですが…

その他の回答 (1)

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.2

>>どういう処理が走るのでしょうか? 普通にこれが上から順に実行されます var hoge = function(arg){  return function() {} }(arg); hoge(); >>初めに実行されるのは? 無名関数部分でhogeにfunction() {}が入ります 次にhoge()でその関数が呼ばれます >>引数は渡らない? はい

re97
質問者

お礼

回答ありがとうございました。 >普通にこれが上から順に実行されます >引数は渡らない? >はい ・そうですよね ・私もそう思ったのですが…、もしかして、何か特別な意味があるのかと思い質問しました…

専門家に質問してみよう