一、關於函數的寫法及調用
(1),JavaScript函數定義在一些地方是不同於C++,.NET,JAVA等物件導向語言的,這些語言都有函數重載的概念。如:
Code
private int sum(int a,int b)
{
return a + b;
}
private int sum(int a,int b,int c)
{
return a + b + c;
}
private int sum(int a,int b,int c,int d)
{
return a + b + c +d;
}
上面的函數sum實現的是整數的相加,調用時根據輸入參數的不同決定其調用的是哪個函數。
但是在JavaScript中函數卻不能這樣寫重載函數,這這會引起混亂。如:
Code
<script language="javascript">
function show()
{
alert("good");
}
function show(s)
{
alert(s);
}
function show(s,w)
{
alert(s+w);
}
</script>
<input type="button" value="函數參數" onclick="show()" />
按照我們的習慣思維,當show函數中不參入參數時,應該調用的是第一個函數,彈出的警告框應該是“good”,但是運行後我們就會發現警告框的內容是“NaN”,這裡系統調用的是最後一個函數,即show(s,w);當調用show('yes')時,它彈出的不是"yes",而是"yesundefined",這裡系統調用的也是最後一個函數,即show(s,w);當調用show('yes','no')時,彈出的是"yesno",這裡系統調用的還是最後一個函數,即show(s,w);當調用show('yes','no','cancel'),結果同show('yes','no')。說明後面的函數會覆蓋前面的同名函數。至於為什麼會產生這種結果,請接著往下看下面一段話,你就會明白了。。。。
由於函數被覆蓋了,show函數定義為最後一個函數。。。而在JavaScript中,如果在函數調用時省略了參數(如show(),show('yes')),則省略的參數(s,w和w)會以undefined類型傳遞。如果在調用時提供了函式宣告所不需要的多餘參數(如show('yes','no','cancel')),多餘的參數('cancel')會被忽略。。。
(2),特殊情況
請看下面函數的運行 結果。
Code
function show()
{
var str = "";//全域變數,要彈出的內容
for (var i = 0; i < arguments.length; i++)
{
//arguments[i]為各個傳入函數的參數
str += arguments[i];
}
alert(str);
}
當我們調用show("偉大的","中華人民","共和國")時,會彈出“偉大的中華人民共和國”。按照上面的思路,裡面的參數應該是被JavaScript解譯器忽略掉的,但是這裡不會,因為我們在寫處理函數的時候已經做了參數處理,arguments為傳入函數的參數數組。
二、函式宣告的置放位置
函數有兩個個存放位置
1,直接放置在js檔案的最頂層 2,放置在一個對象中
(1),直接放置在js檔案中非常之簡單也非常常見,調用也十分清晰。
//聲明
function show()
{
alert("成功");
}
//調用
show();
(2),在對象中寫函數其實也非常常見。由於對象分三種(1,內建對象 2,JSON對象 3,自訂對象),所以這裡也分三種情況討論。
(a) ,內建對象中的函數
//定義
String.prototype.trim = function()
{
return this.replace(/(^\s*)|(\s*$)/g, "");
}
//調用
var str = " 我的左右邊都有空格 ";
alert(str.trim());
(b)JSON對象中的函數
//定義JSON對象obj中的show方法
var obj = {
show:function(){
alert("成功");
}
}
//調用
obj.show();
(c),自訂對象中的函數,這是JavaScript開發人員應用函數最為常見的地方
//定義自訂對象obj中的show函數
function obj()
{
this.show = function()
{
alert("成功");
}
}
//調用
var aaa = new obj();
aaa.show();