2014-09-23 80 views
1
function fn1() { 
    return "hello worl!"; 
} 

function fn2(data) { 
    console.log(data) 
} 

fn2(fn1()) 

// Calling fn2 function passing(same time calling) fn1 function as an argument. 

這是正確的做法?或者還有其他方法嗎?請幫助我。函數調用爲參數值?

我看了一下函數值傳遞給說法沒有括號的一些文章。

(或)

我該怎麼做?

var f = fn1() 
fn2(f) 
+2

無論是正確取決於它打算如何使用。你的代碼示例是正確的,但是執行'fn2(「foo」)''是正確的。 'fn2()'不關心它的參數來自哪裏。在你的情況下,它來自'fn1()'調用的返回值。 'fn1'函數本身沒有被傳遞。 – 2014-09-23 15:23:50

+0

這是一個偏好問題,但一般來說,最好避免一個臨時變量。 – georg 2014-09-23 15:25:52

+0

是的。你可以做到這一點。你不必定義一個變量來傳遞一個函數返回的值 - 這取決於你和你的編碼標準和可維護性。 – developer82 2014-09-23 15:33:15

回答

1

您不能將函數調用作爲參數值傳遞。您可以通過功能

fn2(fn1); // logs `function fn1() {…}` 

函數調用的結果:

fn2(fn1()); // logs `Hello worl!` 

無論你使用一個額外的變量,以中間儲存導致價值doesn't really matter當它的使用只有一次。

我讀過一些關於將函數值傳遞給沒有圓括號的參數的文章。

是的,這會發生一些時間,例如,當您將處理函數傳遞給addEventListener左右時。在那裏,你不希望調用的函數,而是通過功能作爲一種價值 - 它提出了一個重要的區別。

在你的情況,當你想通過hello worl! -string到你的日誌記錄功能,這是不恰當的。你想調用fn1()函數。

1

這要看情況。如果fn1()返回的值在多次使用中,那麼一旦執行var f = fn1()就調用它並不是一個壞主意。例如,如果它是長度或數組,距離等,你會多次使用。所以:

var f = fn1(); 
fn2(f); 
fn3(f); 
fn4(f); 
... 

但同樣,性能自動可能是很輕微的,除非fn1()是計算繁重。雖然它只是期運用f一次,那麼就沒有太大的必要將其存儲在一個變量:

fn2(fn1()); 
+0

呀,謝謝你@Spencer維喬雷克...你說得對,我覺得有些時候,它可能會錯誤在Chrome類似「最大呼叫規模突破:」如果我們把這種在多個地方FN2(FN1()) – Pandu 2014-09-23 15:46:36

相關問題