functionName(parameter1, parameter2, parameter3) { // 要執行的代碼…… } 參數規則 JavaScript 函數定義時形參沒有指定數據類型。 JavaScript 函數對實參的類型不會進行檢測。 JavaScript 函數對實參的個數不會進行檢測 ...
functionName(parameter1, parameter2, parameter3) { // 要執行的代碼…… }
參數規則
JavaScript 函數定義時形參沒有指定數據類型。
JavaScript 函數不會對實參的類型進行檢測。
JavaScript 函數不會對實參的個數進行檢測。
預設參數
如果調用函數時未傳入足夠多的實參,未提供的參數會被預設設置為: undefined.
所以我們最好為參數設置一個預設值。
function myFunction(x, y) { console.log(x); console.log(y); console.log(typeof y); y = y || 1; //為 y 參數設置預設值 console.log(y); } myFunction(2);
如果傳入了 y 參數,y = y || 1 會返回 y;如果沒有傳入 y 參數,y = y || 1 會返回我們設置的預設值 1,因為 undefined 為 false.
JS不同於其他語言,方便起見它通過第一個值求 “||”,第一個值為“true”,則返回第一個值;第一個值為“false”,則返回第二個值。
Arguments 對象
如果調用函數時傳入了過多的實參,參數將無法被引用,因為無法找到對應的參數名。 只能使用 arguments 對象來調用實參。
JavaScript 函數有個內置的對象 arguments 對象。argument 對象包含了調用函數時傳入的參數數組,它是一個類數組對象。
我們可以通過 arguments 對象的屬性和方法讓函數實現很多特殊的功能。
1、js不檢測實參的個數,但是我們可以用 argument 對象的 length 屬性檢測實參的個數。
function add() { if( arguments.length == 2 ){ return arguments[0] + arguments[1]; }else{ return '傳入的參數不合法'; } } console.log( add(2,3) ); console.log( add(1,2,3) );
2、重載函數。
js是一種弱類型的語言,沒有重載機制,當我們重寫函數時,會將原來的函數直接覆蓋掉。
但是我們可以通過 arguments 對象判斷傳入實參的類型與數量,進行不同的操作,然後返回不同的數值,以實現重載。
function sumAll() { var i, sum = 0; for (i = 0; i < arguments.length; i++) { sum += arguments[i]; } return sum; } console.log( sumAll(1,2,3,4,5) ); //15 console.log( sumAll(1,3,5,7,9,11,13) ); //49
3、定義一個函數來連接字元串。
你可以傳遞任意數量的參數到該函數,第一個參數指定一個字元作為銜接點來連接字元串。
function myConcat(separator) { var args = Array.prototype.slice.call(arguments, 1); //從第二個參數開始將參數列表轉換成參數數組 return args.join(separator); } var x = myConcat(", ", "red", "orange", "blue"); //"red, orange, blue" var y = myConcat("; ", "elephant", "giraffe", "lion", "cheetah"); //"elephant; giraffe; lion; cheetah" console.log(x); console.log(y);
附:轉成數組的通用函數(可以將 arguments 對象轉換成數組)
var toArray = function(s){ try{ return Array.prototype.slice.call(s); } catch(e){ var arr = []; for(var i = 0,len = s.length; i < len; i++){ //arr.push(s[i]); arr[i] = s[i]; //據說這樣比push快 } return arr; } }
參考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments