2011-05-26 36 views
3

我剛剛購買了最新版本的「JavaScript:權威指南」,並且已經有了一個問題。 :d定義函數的JavaScript差異

是以下行語義上是相同的:

var square = function(n){ 
       return n * n; 
      }; 

function square(n){ 
    return n * n; 
} 

如果是的話,使用的是他們的優勢/劣勢?

感謝您的幫助!

+0

的可能重複的[是什麼函數表達式VS聲明在Javascript之間的差異?](http://stackoverflow.com/questions/1013385/what-is-the-difference-between-a-function-expression- vs-declaration-in-javascript) – 2011-05-26 14:13:57

+0

謝謝指出,費利克斯。這兩種方法之間的差異現在已經很清楚了。 – aydio 2011-05-27 11:39:44

回答

3

檢查了這一點:

a(); // prints 'A' 

function a(){ 

    console.log('A'); 

}; 

這:

b(); // throws error. b is not a function 

var b = function() { 

    console.log('B'); 

}; 

你有沒有注意到有什麼區別?

+0

感謝您的簡單解釋! – aydio 2011-05-27 11:45:55

+0

的確很好的例子! – 2011-05-27 13:40:19

3

是的,他們完全一樣。

第一種方法的主要優點是,它爲您提供了該函數的引用,這樣,你可以把它傳遞給另一個函數或附加到一個對象,如果你需要。

+0

我同意第一句話,但是如果他們都做完全相同的事情,又怎麼能與另一個不同? – 2011-05-26 14:04:10

+0

您可以對函數聲明(傳遞和分配)執行相同的操作。 – 2011-05-26 14:06:36

0

不同的是,在第一個解決方案,你可以這樣做:

var square = function(n){ 
       return n * n; 
      }; 

// some code 

square = function(n) { return n*n*n; } 

你有參考的功能。在另一個解決方案中,該函數是靜態聲明的。

免責聲明:JS需要大師來告訴我,如果我錯了=)。

+0

嗨克萊門特,說實話,我不明白最後一行是什麼。你能否向我解釋** return n * n * n; **當我想計算平方的目的? – aydio 2011-05-27 12:04:53

+0

你的例子是一個函數,它返回一個數字的平方值,但它可能是任何其他函數,確實很複雜,或者真的是上下文相關的工作。爲方形方法返回'n * n * n'是愚蠢的,但僅僅是爲了舉例。 – 2011-05-27 13:39:41