1.ECMAScript中的函數使用function關鍵字來聲明。 eg: 註意: 在有return語句的函數中,函數會在執行完return語句後停止並立即退出。因此,位於return語句之後的任何代碼都永遠不會執行。 eg: 以上代碼執行後,會出現內容為“10”的警告框,但是不會出現內容為“Hel ...
1.ECMAScript中的函數使用function關鍵字來聲明。
eg:
1 function sum (num1,num2){ 2 alert(num1+num2); 3 } 4 sum(3,7);
註意:
在有return語句的函數中,函數會在執行完return語句後停止並立即退出。因此,位於return語句之後的任何代碼都永遠不會執行。
eg:
1 function sum (num1,num2){ 2 return num1+num2; 3 alert("Hello!");//永遠不會執行。 4 } 5 alert(sum(3,7));
以上代碼執行後,會出現內容為“10”的警告框,但是不會出現內容為“Hello!”的警告框,因為函數內部執行完return語句後就停止結束了,不會執行後面的alert(“Hello!”);語句。
2.嚴格模式下對函數的一些限制
(1)不能把函數命名為evel或是arguments;
(2)不能把參數命名為evel或是arguments;
(3)不能出現兩個命名參數同名的情況。
3.理解參數
(1)ECMAScript中的參數在內部是用一個數組來表示的,函數接收到的始終是這個數組,ECMAScript函數不介意傳遞進來的參數個數以及參數的數據類型,從這一點可以看出,ECMAScript函數不能實現傳統意義上的重載。
重載函數的定義:在相同的聲明域中的函數名相同的,而參數表不同的,即通過函數的參數表而唯一標識並且來區分函數的一種特殊的函數。
(2)函數體內可以通過arguments對象訪問到參數數組,從而獲得傳遞給函數的每一個參數。
1 function sum (){ 2 return arguments[0]+arguments[1]; 3 } 4 alert(sum(3,6));
以上例子說明:
ECMAScript函數命名的參數只提供便利,但不是必需的。
(3)arguments對象的length屬性可以獲知有多少個參數傳遞給了函數。
eg:
1 function howManyArgw(){ 2 alert(arguments.length); 3 } 4 howManyArgw("hello",45); //2 5 howManyArgw(); //0 6 howManyArgw(12); //1
出現三個提示框,依次是:
(4)開發人員可以利用這一點讓函數接收任意個參數並分別實現適當的功能。
eg:
1 function doAdd(){ 2 if(arguments.length==1){ 3 alert(arguments[0]+10); 4 }else if(arguments.length==2){ 5 alert(arguments[0]+arguments[1]); 6 } 7 } 8 doAdd(20); 9 doAdd(21,10);
(5)arguments對象可以與命名參數一起使用:
eg:
1 function doAdd( num1,num2){ 2 if(arguments.length==1){ 3 alert(num1+10); 4 }else if(arguments.length==2){ 5 alert(arguments[0]+num2); 6 } 7 } 8 doAdd(20); 9 doAdd(21,10);
(6)arguments的值永遠與對應命名參數的值保持同步。
eg:
1 function add(num1,num2){ 2 arguments[1]=10; //每次執行add函數都會重寫第二個參數,將第二個參數的值改為10. 3 alert(arguments[0]+num2); 4 } 5 add(1,2);//本來的值是1+2=3,因為第二個參數的值被改變1+10=11.
註意:
(1)這並不是說著兩個值會訪問相同的記憶體空間,它們的記憶體空間是獨立的,但是它們的值會同步。
(2)沒有傳遞值的命名參數將會自動被賦予undefined值。
eg:
1 function add(num1,num2){ 2 arguments[1]=10; 3 alert(arguments[0]+num2); 4 } 5 alert(typeof(num2)); 6 add(1);
依次出現的提示框:
(3)ECMAScript中的所有參數傳遞都是值,不可能通過引用傳遞參數。