unction funcName(){
//函數體
}
//等價于
var funcName=function(){
//函數體
}
但前面一種方式創建的是有名函數,而后面是創建了一個無名函數,只是讓一個變量指向了這個無名函數。在使用上僅有一點區別,就是:對于有名函數,它可以出現在調用之后再定義;而對于無名函數,它必須是在調用之前就已經定義。例如:
script language="JavaScript" type="text/javascript">
<!--
func();
var func=function(){
alert(1)
}
//-->
</script>
這段語句將產生func未定義的錯誤,而:
<script language="JavaScript" type="text/javascript">
<!--
func();
function func(){
alert(1)
}
//-->
</script>
則能夠正確執行,下面的語句也能正確執行:
<script language="JavaScript" type="text/javascript">
<!--
func();
var someFunc=function func(){
alert(1)
}
//-->
</script>
認識函數對象(Function Object)
可以用function關鍵字定義一個函數,并為每個函數指定一個函數名,通過函數名來進行調用。在JavaScript解釋執行時,函數都是被維護為一個對象,這就是要介紹的函數對象(Function Object)。
函數對象與其他用戶所定義的對象有著本質的區別,這一類對象被稱之為內部對象,例如日期對象(Date)、數組對象(Array)、字符串對象
(String)都屬于內部對象。這些內置對象的構造器是由JavaScript本身所定義的:通過執行new
Array()這樣的語句返回一個對象,JavaScript內部有一套機制來初始化返回的對象,而不是由用戶來指定對象的構造方式。
JavaScript為函數對象定義了兩個方法:apply和call,它們的作用都是將函數綁定到另外一個對象上去運行,兩者僅在定義參數的方式有所區別:
Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg[,arg1[,arg2…]]);
在javascript的繼承中可以使用其方法
例如:
function ClassA(sColor){
this.color=sColor;
this.sayColor=function()
{
alert(this.color);
}
}
function ClassB(sColor,sName){
ClassA.call(this,sColor);
或者
ClassA.apply(this, new Array(sColor));
this.name=sName;
this.sayName=function()
{
alert(name);
}
}