函數(shù)可以封裝任意多條語句。可以在任何地方。任何時(shí)候調(diào)用執(zhí)行。JS里面使用function關(guān)鍵字來聲明,后跟一組參數(shù)以及函數(shù)體。語法
function functionName(arg0,arg1,....argN)
{
statements;
}
下面是一個(gè)函數(shù)實(shí)例:
function sayHi(name,message)
{
alert("Hello"+name+","+message);
}
這個(gè)函數(shù)可以通過函數(shù)名來調(diào)用,后面還要加上一對(duì)圓括號(hào)和參數(shù)(圓括號(hào)里面的參數(shù)要是有多個(gè),可以用逗號(hào)隔開)調(diào)用sayHi()來運(yùn)行
sayHi("Peter","How are you");
剛才那個(gè)函數(shù)的輸出結(jié)果就是Hello Peter How are you today
函數(shù)中定義的命名參數(shù)name和message被用作了字符串拼接的兩個(gè)操作數(shù)。而結(jié)果顯示了出來.
任何函數(shù)在任何時(shí)候都可以通過return語句后跟要返回的值來實(shí)現(xiàn)返回值
請(qǐng)看下面的例子:
function sum(num1,num2)
{
return num1 + num2;
}
這個(gè)sum()函數(shù)的作用就是把兩個(gè)值加起來返回一個(gè)結(jié)果。
var result = sum(5,10);
這個(gè)函數(shù)執(zhí)行完return語句后停止并立即退出。因此位于renturn后面的語句永遠(yuǎn)不會(huì)執(zhí)行
function sum(num1,num2)
{
return num1+num2;
window.alert("Hello,world!"); //永遠(yuǎn)不會(huì)執(zhí)行
}
在這個(gè)例子中由于alert()函數(shù)語句位于return語句之后,因此永遠(yuǎn)不會(huì)執(zhí)行,當(dāng)然一個(gè)函數(shù)中也可以包含多個(gè)return語句,例如:
function diff(num1,num2)
{
if(num1>num2)
{
return num2-num1;
}else
{
return num1-num2;
}
}
在這個(gè)例子中diff()函數(shù)用于計(jì)算兩個(gè)數(shù)值的差。
另外return語句也可以不帶任何的返回值,在這種情況下。函數(shù)停止執(zhí)行后返回undefined值。這種用法需要提前停止又不需要返回值得情況.
function sayHi(name,message)
{
return ;
window.alert(name+message);
}
理解參數(shù)
在JS中不介意傳遞進(jìn)來多少個(gè)參數(shù),也不在乎傳進(jìn)來的參數(shù)是什么類型。也就是說我們可以利用arguments對(duì)象來訪問所有的參數(shù)
其實(shí)aruguments對(duì)象只是與數(shù)組類似(它并不是Array的實(shí)例。)因此可以使用方括號(hào)的語法訪問它的每個(gè)元素。(即第一個(gè)元素arguments[0],第二個(gè)元素arguments[1]),使用length來確定傳遞了多少個(gè)參數(shù)。
例如:
function sayHi(name,message)
{
window.alert("hello"+arguments[0]+arguments[1])
}
這樣也能訪問到第一個(gè)參數(shù)和第二個(gè)參數(shù)
通過訪問arguments對(duì)象的length屬性可以知道有多少個(gè)參數(shù)傳遞給函數(shù)。這樣每次被調(diào)用時(shí),輸出傳入的其中的參數(shù)個(gè)數(shù).
function how(){
window.alert(arguments.length);
}
how("string",345); // 2
how(); // 0
how(12); //1
特別注意一點(diǎn)就是arguments可以與命名參數(shù)一起使用。如
function doadd(num1,num2)
{
if(arguments.length ==1)
{
alert(num1+10);
}else if(arguments.length==2)
{
window.alert(arguments[0]+num2);
}
}
關(guān)于arguments的行為。那就是他的值永遠(yuǎn)與對(duì)應(yīng)命名參數(shù)保持同步。
function doadd(num1,num2)
{
arguments[1] = 10 ;
window.alert(arguments[0]+num2);
}
每次執(zhí)行這個(gè)doadd函數(shù)都會(huì)重寫第二個(gè)參數(shù),將第二個(gè)參數(shù)改變?yōu)?0,因此arguments[1]的里面值也會(huì)被修改,相當(dāng)于修改了num2,結(jié)果他們的值都會(huì)變成10
沒有重載
JS里面沒有重載。例如:
function addSomeNumber(num)
{
return num +100;
}
function addSomeNumber(num)
{
return num+200;
}
var result = addSomeNumber(100); // 300
在此,函數(shù)addSomeNumber()被定義了兩次。第一個(gè)版本給參數(shù)加100,而第二個(gè)版本給參數(shù)加200,由于后定義的函數(shù)覆蓋了定義的函數(shù)。所以最后返回的結(jié)果就是300