2014-03-06 16 views
0

我是Javascript新手,雖然我有.net背景。通常在.NET(以及許多其他語言)中,如果方法需要傳遞參數,則必須傳遞它(否則由於簽名不正確而導致編譯器錯誤)。這在JavaScript中似乎也是如此,但並非所有情況都會出現。沒有參數傳遞時,參數如何存在?

這在Javascript中似乎不是這種情況。

作爲一個工作示例,請參閱第61行

http://www.humblesoftware.com/flotr2/#!basic-axis

61號線是tickFormatter: ticksFn,

我明白tickFormatter被調用函數調用ticksFn但29行顯示

function ticksFn(n) { 
    return '(' + n + ')'; 
} 

'ticksFn'需要傳遞一個值(n),但是我們永遠不會傳遞它。

儘管如此,仍然JavaScript的得到它的權利,我不能找出如何,我也不能工作/明白該怎麼尋找做更多的研究

+2

您是否知道'tickFormatter:ticksFn'不調用該方法? –

+1

函數永遠不會被調用..關於第61行,'tickFormatter:ticksFn' <---'ticksFn'是一個值,而不是函數,函數調用總是有'()' –

回答

1

你永遠不會調用它。您將函數本身作爲參數傳遞(或者作爲參數的對象屬性的值)。

graph = Flotr.draw(container, [ /* ... */], { 
     xaxis : { 
     noTicks : 7,    // Display 7 ticks. 
     tickFormatter : ticksFn, // Displays tick values between brackets. 
     // … 

您的第三方庫代碼負責實際調用該函數,並且它使用參數執行此操作。

+0

那麼,它就像一個委託/指針? – MyDaftQuestions

0

在JavaScript中,不需要傳遞函數的參數,因爲如果不傳遞未定義的值,則傳遞值。

因此,在函數:

function ticksFn(n) { 
return '(' + n + ')'; 
} 

可以調用:

ticksFn(); 

沒有任何問題和n是不確定的價值..

另外一個函數沒有定義參數:

function ticksFn() { 
return '(' + arguments[0] + ')'; 
} 

,並呼籲:

ticksFn(10); 

參數[0]將是10,因此,您可以讀取任何數量的參數。

這是關於JavaScript函數的快速教程..現在你的代碼.. JavaScript是一種面向功能的語言,所以寫的函數名沒有括號實際上雙手放在函數的引用而不是調用函數本身..

+1

我不知道這是否真的回答了我們建立滴答的問題.Fn不是一個參數。我知道如果沒有參數通過然後它變成未定義的函數,但是,在我的問題中,參數被定義... – MyDaftQuestions

+0

是的抱歉,我重新讀你的問題,我意識到我誤解了這個問題..我無論如何在最後添加了一段,以告訴你的問題提示..對不起:-) –

+1

不用擔心,謝謝你抽出時間:)雖然我會指出你這個http://stackoverflow.com/questions/3962604/is-javascript-a-functional-programming-language – MyDaftQuestions