2017-08-27 275 views
4

我正在嘗試從在線教程中解決問題。考慮下面的函數:如何調用另一個函數的返回內部函數?

var badFunction = function() { 
    return function() { 
    return "veryBad" 
    } 
} 

這裏,badFunction返回返回"veryBad"功能。我想在theBad以內存儲"veryBad"。我怎樣才能調用返回的內部函數?這個答案是不能接受的:

var theBad = "veryBad!"; 

也不是這樣的:

var theBad = badFunction(); 
theBad(); 

雖然這兩個工作。那麼如何調用內部函數呢?

+2

第二個* *會調用你的內部函數。你只是沒有做任何與返回值?!嘗試'console.log(theBad())'它。 – Bergi

回答

10

只需調用的返回值:

var theBad = badFunction()(); 

這將首先調用函數badFunction,該函數完成此之後,它會再調用返回功能。評價看起來是這樣的:

badFunction()(); 
^^^^^^^^^^^^^ 
Step 1, calls badFunction 

然後,一旦badFunction被調用,它返回一個匿名函數表達式:

(function() { // <-- This is the return value of badFunction 
    return "veryBad" 
})(); 
    ^^ 
    Step 2, call the returned function expression for "veryBad" 

當然,你可以在返回的函數存儲在一箇中間變量,然後調用:

var veryBadFunc = badFunction(); 
var theBad = veryBadFunc(); 

這將存儲返回的功能veryBadFunc,你以後可以調用和存儲theBad。這正是你在最後一次嘗試中所做的。值得注意的是,你必須做一些與返回值,如存儲在一個變量供以後使用。

+0

謝謝!我讚賞清楚的解釋。我知道我錯過了一些東西,即存儲返回值。我接受了你的答案。 – user3763682

相關問題