2017-05-31 9 views
-1
var setup = function(){ 
    console.log("xyz"); 
    return function goBack(){ 
     console.log("It's actually abc"); 
    } 
} 

グローバルスコープ内でsetup()を呼び出すと、コンソールに "xyz"が表示されますが、戻ってくる関数(goBack)がグローバルに追加されていません範囲。一度setup()を実行すると、グローバルスコープからgoBackにアクセスすることはできませんか?グローバルスコープ内にリターン関数が見つかりません

+0

いいえ、これはjavascriptの仕組みではありません。 –

+0

@OmriLuzon非常に有益なコメントありがとうございます。おかげさまでお世話になりました。私の疑問はすべて明らかです。 :) – user3118458

答えて

0

いいえ、setupから返信しています。goBackという名前は無関係です。あなたはsetupからの戻り値でそれを呼び出す必要があります:

var foo = setup(); 
foo();// calls the function youve named `goBack` 
// goBack() does not exist here. 
2

setup機能を返しています。

アクセスするには、まずvar result = setup()を呼び出します。今度はgoBackresult変数に格納されています。

を使用して、setupの範囲外のgoBackを呼び出すことができるようになりました。

+0

私はあなたが言っているものを得る。しかし、setup()を 'result'変数に格納せずに単に実行するとどうなりますか?私がここで理解したいのは、どこに行くか? – user3118458

+0

この場合、参照が行われていないため、ガベージコレクタによって 'goBack'が返され、取得されます。それを参照することなく、それを呼び出す方法はありません。 –

+0

あなたができることは 'setup()()'です。これはsetupを呼び出し、最初の関数から返されるときにすぐに 'goBack'を呼び出します。即時呼び出しの形式です。 –

0

あなたがここで見るように、私は生命維持にGOBACKを作り、セットアップと呼ばれる()グローバルスコープでいるこの

var setup = function(){ 
console.log("xyz"); 
return function goBack(){ 
    console.log("It's actually abc"); 
}(); // IIFE here 
} 

setup(); // returns xyz , its actually abc 

のように、この機能GOBACKにアクセスすることができます。

あなたがする必要があったのは、戻ってきた機能を呼び出すことでした。

関連する問題