JSの関数オブジェクトは色々と生成方法があって、生成方法にって中身が異なったりするよう。すごく迷うところに感じる。
以下はちょっと自分的な迷いどころで、内部関数に関して自分用に整理してみた。
関数の生成 | 内部関数inn()へのアクセス | 呼び出し | 備考 |
---|---|---|---|
sam=function( ){inn=function( ){ }}; | 不可 | - | クロージャー |
function sam( ){inn=function( ){ }} | 不可 | - | クロージャー |
sam=function( ){inn=function( ){ };return inn;}; | 可 | sam( )( ); | 直接inn( )は呼べないが、returnで戻せばOK |
function sam( ){inn=function( ){ };return inn;} | 可 | sam( )( ); | 上に同じ |
function sam( ){this.inn=function( ){ }} | 可 | new sam( ).inn( ); | |
sam={inn:function( ){ }}; | 可 | sam.fun( ) | innは関数ではなくパラメータ (クロージャーにならない) |
sam=function( ){inn.function( ){ }}には、constructorはなく、インスタンス化できないので、new sam( ).inn( );のようにはできない。