這裡只記錄下javascript函數的一些特性。關於對象,類比類會在以後的筆記中記錄
1.javascript函數無重載。
js不支援重載,後面函數會覆蓋前面函數。它不支援重載的特點不免讓人感到意外。
2.arguments對象
js不支援重載,不代表我們不能實現重載。程式員的智慧是無窮的!讓我們藉助arguments對
象來實現函數重載吧!arguments.length表示參數個數
function sayHi(){
if(arguments.length == 1){
if(typeof(arguments[0])=="string"){
alert("do method 1");
}else{
alert("do method 2");
}
}else if(arguments.length == 2){
alert("do method 3");
}
}
sayHi("hehe");
sayHi(1);
sayHi("傻笑",100)
3.Function 類
可以使用Function類直接建立函數:
var function_name = new Function(arg1,arg2,...argN,function_body);
例如:
var sayHi = new Function("sName","sMessage","alert(sName+','+sMessage);");
sayHi("wangping","ww");
注意:最好不要使用Function類建立函數,因為----慢!
4.由於函數名只是指向函數的變數,所以可以把函數作為參數傳遞給另外一個參數。
function callFun1(fnFun1,vArg){
fnFun1(vArg);
}
function doAdd(iNum){
alert(iNum+10);
}
callFun1(doAdd,10);
5.由於函數是參考型別,所以它們也有屬性和方法名。
function_name.length 返回函數名為function_name的函數的參數個數。
function_name.toString() 返回函數名為function_name的函數的原始碼(這個調試的時候
很有用)。
function_name.valueOf() 同function_name.toString()
代碼:
function doAdd(){
alert(10);
}
alert(doAdd.valueOf());
6.閉包。閉包是javascript最容易讓人誤解的特點之一。所謂閉包,指詞法表示包括不必計算
的變數的函數,通俗地說就是指函數能訪問函數外定義的變數:
var iBaseNum =10;
function outerFun(iNum1,iNum2){
function innerFun(){
alert(iNum1+iNum2+iBaseNum)
}
return innerFun();
}
outerFun(1,1);
innerFun可以無需定義參數,得到它外部的函數iNum1,iNum2的參數值以及全域變數iBaseNum
的值。雖然難於想像,但是當你被c#等語言為了互相調用而不停地定義參數搞得抓狂時,你就
看到閉包的好處了。