有關於這個問題here
函數可以有一個名字,如果指定了不能改了很多有用的信息。函數也可以像JavaScript中的任何其他對象一樣分配給變量。
第一個例子是一個函數聲明:
function myfunc(){
}
使用函數的聲明,你將能夠在該函數聲明封閉範圍內的任意位置調用該函數,即使是後宣佈它被使用。
另外兩個例子是函數表達式:
var myvar = function(){
/*some code*/
}
var SqueezeBox= {
presets: {
onOpen:function(){/* empty function body */},
onClose:function(){/*empty function body */}
}
}
使用你給一個變量賦值功能函數表達式。當你這樣做時,你必須在使用它們之前聲明它們。大多數時候,你看到這個功能將是匿名的,但它有可能舉出在表達式中的函數:
var myvar = function myFunc(){
myFunc(); // Because it has a name you can now call it recursively
}
如果這樣做,myFunc
功能是唯一可用的函數體中,因爲它是仍然是函數表達式而不是聲明。
第三個示例聲明瞭一個javascript對象字面值SqueezeBox
,在該對象內有另一個名爲presets
的對象。在這個對象內還有兩個對象/標籤,稱爲onOpen
和onClose
。這意味着你可以做以下使用這些功能:
SqueezeBox.presets.onOpen();
SqueezeBox.presets.onClose();
你可以認爲的OnOpen和OnClose中的作爲作爲對象的部分變量。因此它與進行以下操作非常相似(但該變量僅在presets
對象的範圍內,該對象僅在SqueezeBox
對象中可用)。
var onOpen = function() {};
第二個例子是無效的,我想你想寫'VAR MYVAR =函數(){} [VAR functionName =函數(){} VS功能使用functionName(){}'的可能 –
重複](http://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname) – CodingIntrigue
最後一個是匿名函數,作者如何調用函數或爲該函數設置一些代碼。 –