送信する前に、この投稿について慎重に考えていませんでした。申し訳ありません。
4 に答える
2番目の例は無効です:
return{
init();
}
は{ ... }
、 のようなキーと値のペアを含む必要があるオブジェクト リテラルを定義します{ foo: 'bar' }
。
最初の例は、内で処理を行い、init
を返しundefined
ます。
2 番目の例は無効です。私はあなたが欲しかったと思います:
return init()
中括弧なし。init
これは(指定していない)の結果を返します。どちらの場合も、setup
呼び出さmoreSetup
れることはないので、なぜそこにいるのかわかりません。
多くの詳細を省きましたが、今の私の答えは次のとおりです。呼び出し元が結果に対して何かをする必要があるinit
場合は、オプション 2 を使用する必要があります。
気分を害するつもりはありませんが、これはやや混乱した質問のように思えます。init()
他の人が指摘したように、2 番目の例では括弧を使用しないでください。そして、関数を呼び出すのではなく定義するだけだと言うfunction setup() { ... }
ときは、この例では関数が呼び出されないことを意味します。
しかし、私がこの回答を投稿して対処しようとしている主なことは、「init関数を呼び出すvs.その関数呼び出しを返す」です。2 番目の例で「関数呼び出しを返す」と考えるのは誤りです。と言うとreturn init()
、最初init()
に が呼び出されて何らかの値が返され、次にfoo
関数が によって返された値が返されinit()
ます。
それがあなたが尋ねるべき質問です。foo
を呼び出したいだけですinit
か、それともfoo
呼び出しinit
て戻り値をinit
返したいですか? それが2つの違いです(他のエラーが削除された後)。
私のように init で関数を呼び出すというアイデアにまだ興奮している場合:)、次のように関数を設計できます。
var mainFunction = function() {
var init = () => {
functionOne();
functionTwo();
}
function functionOne(){
console.log('I am the first one');
}
function functionTwo(){
console.log('I came second?');
}
return {
init: init
};
}(); // please note the () - call the function here or use
// mainFunction().init()
mainFunction.init();