2017-07-28 80 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關閉返回函數

爲什麼不輸出第二句話?爲什麼必須再次運行才能按預期輸出?

+1

你是什麼意思的「編譯」?您的代碼按預期工作。你能更具體地指出哪一部分讓你感到困惑嗎? –

+0

讓我們忽略funB(),如果我只調用funcA(),結果是「jack」。但是爲什麼返回句子不起作用?我預測它會輸出「jack plus」 – 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的只返回一個匿名函數。沒有「()」,它不會執行此功能。

0

當你調用funcB = funcA();它做什麼運行funcA()console.log(name);,然後分配回線4.匿名函數這指派返回功能的funcB(像我們一樣var someName = function(){ // do something})。因此,執行此功能,你需要調用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

當你調用FuncA的() 「VAR funB = FuncA的()」。它會記錄「jack」,然後返回一個函數。如果你返回一個函數,它不會自動運行它。你只有在你稱它爲「funB();」時才運行它。