2012-12-15 91 views
1

說我有一個功能:我可以調用一個函數作爲參數嗎?

function foo(){ 
    // do a bunch of stuff, manipulate DOM, etc. 
    // and then: 
    if(some_condition) return true; 
    else return false; 
} 

由於這將是很好,既執行功能的「一堆東西」,並在同一時刻使用其返回值,我想知道,如果它是正確的做到這一點:

if(foo()){ // foo happens right here 
    // do some stuff because foo returned true 
} 

這是正確的語法和用法嗎?

+0

我不知道,但我非常感興趣。你應該測試它,並告訴我們它是否工作 –

+0

只是它的正確.. – senK

+3

該語法是正確的,將做你想做的,但不是使用函數作爲參數。 (還要注意,如果'some_condition'實際上是一個布爾值,那麼你可以說'return some_condition'。) – nnnnnn

回答

1

這絕對沒問題。即使foo沒有返回布爾值,返回值也會被強制爲布爾值,所以在任何情況下都可以。

你在做什麼只是不用一個變量代替foo()的返回值。

這將是一個問題的唯一時間是如果foo()返回不同的值,在這種情況下,如果您希望該值在整個代碼中保持不變,則必須將返回值設置爲變量並使用該變量。

順便說一句,這是javascript的基礎知識之一。除非你剛剛開始,否則你應該知道這一點。

哦,正如人們在評論中所說的那樣,這並沒有使用函數作爲參數。 使用函數作爲參數會做這樣的:

function bar(a) { 
    // do something with a 
} 
function foo(){ 
    // blah blah blah 
} 
var thing = bar(foo); // notice no parentheses `()` after foo 
// do something with thing 
+0

雖然我沒有使用函數本身作爲參數,但我正在調用函數,所以它返回一個參數。如果你可以提出一個更好的措辭,我很樂意編輯它。 –

0

似乎好給我嗎?您沒有使用一個函數作爲參數,你只是這樣做:

var ret = foo(); 
if(ret){  
} 

可能有些瀏覽器可能會做兩個和一個非常低的水平之間的優化。 (我想可能是因爲在你的情況下,其他地方沒有使用返回值。)

但是這個想法/語義保持不變。

1

像其他人一樣表示它會按照您的預期工作。我只想提出一個優化:

function foo(){ 
    // do a bunch of stuff, manipulate DOM, etc. 
    // and then: 
    return !!some_condition; 
} 

如果some_condition是truthy值(1,​​,{}[]),那麼!!some_condition會表達true。否則它會表示false

然後你可以使用它作爲你想:

if (foo()) { // foo happens right here 
    // do some stuff because foo returned true 
} 
相關問題