2017-07-28 12 views
-2
function funcA(){ 
    var name = "jack"; 
    console.log(name); 
    return function(){ 
    name = name + " plus"; 
    console.log(name); 
    }; 
} 
var funB = funcA(); 
funB() 

// expected result: "jack" and "jack plus" 

私は混乱していますなぜrunnnig var funB = funcA();"jack"だけを出力しますか?関数を返すJavaScriptクロージャー

なぜ2番目の文が出力されないのですか?意図したとおりに出力するのがなぜ2度目に実行されなければならないのですか?

+1

「コンパイル」とはどういう意味ですか?あなたのコードは期待どおりに動作します。どの部分があなたを混乱させるのか、より具体的にできますか? –

+0

funB()を無視して、funcA()だけを呼び出すと "jack"という結果になります。なぜ戻り文が機能しなかったのですか?私はそれが "ジャックプラス" – kennyname

+0

を出力すると予測して、関数オブジェクトを返します。 – AirNoir

答えて

0

それは動作しますが、これを実行しよう:

function funcA(){ 
 
    var name = "jack"; 
 
    console.log(name); 
 
    return function(){ 
 
    name = name + " plus"; 
 
    console.log(name); 
 
    }; 
 
} 
 
var funB = funcA(); 
 
funB();

0
var funB = funcA(); 

それがてfuncAが実行されたこと、そしててfuncAだけ無名関数を返します。 "()"がなければこの関数は実行されません。あなたは(私たちはvar someName = function(){ // do something}を行うように)、それはfuncA()すなわちconsole.log(name);を実行し、リターン・ライン4上の匿名関数を割り当てているん何このfuncBのにリターン機能を割り当てるfuncB = funcA();を呼び出す

0

。だから、あなたがてfuncA() "のvar funB =てfuncA()" を呼び出すとfuncB();

function funcA(){ 
 
     var name = "jack"; 
 
     console.log(name); 
 
     return function(){ 
 
      name = name + " plus"; 
 
      console.log(name); 
 
     }; 
 
    } 
 
    
 
    var funcB = funcA(); 
 
    //Output:- jack 
 

 
    console.log(funcB); 
 
    /*Output:- f(){ 
 
        name = name + " plus"; 
 
        console.log(name); 
 
       } 
 
    */

0

を呼び出す必要が機能を実行します。それは "ジャック"を記録し、それから関数を返します。関数を返すと、関数は自動的には実行されません。あなたはそれを "funB();"と呼んだときにだけ実行します。

関連する問題