ECMAScript 中的函數使用function 關鍵字來聲明,後跟一組參數以及函數體。函數的基本語法以下所示:數組
function functionName(arg0, arg1,...,argN) { statements }
函數示例:函數
function sayHi(name, message) { alert("Hello " + name + "," + message); }
調用sayHi()函數的代碼以下所示:spa
sayHi("Nicholas", "how are you today?");
ECMAScript 中的函數在定義時沒必要指定是否返回值。code
function sum(num1, num2) { return num1 + num2; }
調用這個函數的示例代碼以下:對象
var result = sum(5, 10);
這個函數會在執行完return 語句以後中止並當即退出。blog
ECMAScript 函數不介意傳遞進來多少個參數,也不在意傳進來參數是什麼數據類型。ip
ECMAScript 中的參數在內部是用一個數組來表示的。ci
函數也能夠像下面這樣重寫,即不顯式地使用命名參數:string
function sayHi() { alert("Hello " + arguments[0] + "," + arguments[1]); }
命名的參數只提供便利,但不是必需的。io
經過訪問arguments 對象的length 屬性能夠獲知有多少個參數傳遞給了函數。下面這個函數會在每次被調用時,輸出傳入其中的參數個數:
function howManyArgs() { alert(arguments.length); } howManyArgs("string", 45); //2 howManyArgs(); //0 howManyArgs(12); //1
函數可以接收任意個參數並分別實現適當的功能。
function doAdd() { if(arguments.length == 1) { alert(arguments[0] + 10); } else if (arguments.length == 2) { alert(arguments[0] + arguments[1]); } } doAdd(10); //20 doAdd(30, 20); //50
arguments 對象能夠與命名參數一塊兒使用。
function doAdd(num1, num2) { if(arguments.length == 1) { alert(num1 + 10); } else if (arguments.length == 2) { alert(arguments[0] + num2); } }
arguments 對象的長度是由傳入的參數個數決定的,不是由定義函數時的命名參數的個數決定的。
沒有傳遞值的命名參數將自動被賦予undefined 值。
ECMAScript 函數不能像傳統意義上那樣實現重載。ECMAScirpt函數沒有簽名,由於其參數是由包含零或多個值的數組來表示的。而沒有函數簽名,真正的重載是不可能作到的。
若是在ECMAScript 中定義了兩個名字相同的函數,則該名字只屬於後定義的函數。
function addSomeNumber(num){ return num + 100; } function addSomeNumber(num) { return num + 200; } var result = addSomeNumber(100); //300