2017-07-25 20 views
-1
function Hello() 
{ 
    function HelloAgain(){ 
    } 
} 

function MyFunction(){ 
... 
} 

ここでは、MyAction()関数をMyFunction()から呼び出す必要があります。 このシナリオに対して可能な解決策を提案できますか?関数内の子関数をJavascriptの別の関数から呼び出す方法はありますか?

+3

googleダウンですか? –

+0

'HelloAgain'がネストされている場合、それは親関数の外から使用すべきではないことを示唆しています。あなたが関数の外でそれを必要とするなら、なぜ最初にそれを入れ子にするのですか?そして、私はこれが論理的に意味をなさないと思う。子関数が親関数のデータを使用した場合はどうなりますか?親関数が呼び出されなかった場合、内部関数はどのデータを使用しますか? – Carcigenicate

+2

あなたが何とかそれを公開しない限り、それは不可能です。 – epascarello

答えて

1

できません。 HelloAgainの範囲は、Helloの機能に限定されています。 これはjavascriptでプライベートスコープを作成する唯一の方法です。

0

HelloAgain関数はクロージャ内にあり、そのクロージャにスコープされていません。

HelloAgain関数を返すことができ、Helloを呼び出すことができるどこからでも呼び出すことができます。

function Hello() { 
    function HelloAgain() {} 
    return HelloAgain; 
} 

function MyFunction() { 
    Hello().HelloAgain(); 
} 

しかし、それは少し奇妙です。

この件については、thisというキーワードを使用してください。

function Hello() { 
    this.helloAgain = function helloAgain() {} 
} 

var hello = new Hello(); 

function MyFunction() { 
    hello.helloAgain(); 
} 
+0

'this'はその文脈で' window'になる( 'helloagain'をグローバル変数にします)、"この問題を扱うために 'this'を使うことができます"ということは少し不明です。 – yuriy636

+0

'this'は' Hello''ではなく 'window'です。https://jsfiddle.net/L09y3gcL/ –

+0

本当に、申し訳ありませんが、' new Hello() '部分は完全に見逃していました。 – yuriy636

関連する問題