2015-05-30 36 views
1

我在學習JavaScript,但無法理解以下代碼行之間的區別。函數作爲函數和函數的區別在Javascript中引用

var f = myfunction; 
var k = myfunction(); 

function myFuncton() 
{ 
    alert("hello world"); 
} 

因爲我們不能像C#這樣的託管語言做類似的東西。但是我已經看到了很多JavaScript代碼示例,其中在分號(;)之前將函數分配給變量而沒有打開和關閉括號,然後如上面代碼中所示將相同函數分配給具有開放和閉合括號的另一個變量。這兩項任務之間有什麼區別,爲什麼我們要在JavaScript中這樣做?

+1

OFC你可以在C#中完成這兩個操作(即將函數引用賦值爲變量VS,並將函數調用的結果賦值給變量)。 –

+0

請分享一些代碼,以瞭解如何實現var f = myfunction;在C#中? – user2913184

+0

這是你如何聲明變量來保存函數引用在C#中: '公共委託int OperationDelegate(int p); \t \t公共MyClass類 \t { \t \t私人詮釋廣場(INT P) \t \t { \t \t \t回P *磷; \t \t} \t \t \t \t公共無效運行() \t \t { \t \t \t OperationDelegate FUNC; \t \t \t func = Square; \t \t \t func(10); \t \t \t func = i => i * 100; \t \t \t func(10); \t \t} \t}' –

回答

4

括號在這樣一個任務:

var k = myfunction(); 

意味着什麼被分配到k函數本身,而是結果調用功能—函數的返回值,在也就是說。

沒有括號,那麼你確實分配參照功能有一定的變量:

var f = myfunction; 

這樣做之後,這將是可以調用由任何名稱的功能:

f(); // same as myfunction(); 

JavaScript中的函數只是一種特殊類型的對象,但它們在大多數方面確實只是對象。它們可以具有屬性,並且可以按照與引用對象相同的方式傳遞對它們的引用。

是什麼使一個功能特別的是,你可以稱它。無論引用來自何處,對()(或帶有參數的())之後的函數的引用都是函數調用。這就是爲什麼將函數調用賦值給變量,或將函數引用作爲參數傳遞給某個其他函數的用法,這很有用。

+0

事實上,我知道,但是賦值給變量f更令我困惑。 – user2913184

+0

@ user2913184我剛更新了答案;我還會添加更多的單詞。 – Pointy

+0

謝謝你,先生你結束了我的困惑。 – user2913184

2
var f = myfunction; 

這會創建一個新變量f,它指的是myfunction

var k = myfunction(); 

這就產生了一個可變k被分配調用和執行myfunction()後所得的值。

相關問題