送信する前に、この投稿について慎重に考えていませんでした。申し訳ありません。
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();