- ベストアンサー
オブジェクトの中で呼び出される順番とデフォ引数?
・意味が分からないコードがあるので教えてください ■コード var arg; var obj = { hoge : function( arg ) { var hoge = function(arg){ return function() { } }(arg); hoge(); } } ■質問 ・この時、obj.hoge(arg);と書いたら、どういう処理が走るのでしょうか? ・初めに実行されるのは? 無名関数部分? それともhoge()? ・hoge()を実行する際、引数指定していないので、引数は渡らない?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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の名称を変えてあげれば、少し理解しやすくなるのではないでしょうか。
その他の回答 (1)
- b0a0a
- ベストアンサー率49% (156/313)
>>どういう処理が走るのでしょうか? 普通にこれが上から順に実行されます var hoge = function(arg){ return function() {} }(arg); hoge(); >>初めに実行されるのは? 無名関数部分でhogeにfunction() {}が入ります 次にhoge()でその関数が呼ばれます >>引数は渡らない? はい
お礼
回答ありがとうございました。 >普通にこれが上から順に実行されます >引数は渡らない? >はい ・そうですよね ・私もそう思ったのですが…、もしかして、何か特別な意味があるのかと思い質問しました…
お礼
回答ありがとうございました。 >内部の変数hogeの名称を変えてあげれば、少し理解しやすくなるのではないでしょうか ・そうですよね ・もしかしてjavascript的に何か特別な意味があるのかもしれない、と思い質問してみたのですが…