函數分爲有參有返回值,有參無返回值,無參無返回值,無參有返回值;那麼對於無參數的函數你想使用函數的調用怎麼辦呢?若是你想封裝一個代碼,實現多種功能,可是形參大於實參或者實參大於形參又該如何?本文就發生函數調用過程當中,值傳遞,參數的不對等處理原則等關於參數的一些相關操做進行闡述。javascript
function say(name,message){ console.log('Hello' + name + message); } say('World!','ByeBye!','World’); //控制檯打印出:HelloWorld!ByeBye!
function say(name,message){ console.log('Hello' + name + message); } say('World!’); //控制檯打印出:HelloWorld!undefined
在JS中變量定義的時候,若是未給一個變量賦初值那麼該變量的類型爲undefiendjava
細心的能夠發現一個規律,就是在進行函數調用的時候,無論實參的數目大於形參仍是小於形參被調用的函數都會執行;在JS中函數不介意傳遞進來多少個參數,也不在意傳進來的參數是什麼數據類型。發生函數調用的時候能夠給一個實參也能夠給多個實參,之因此會這樣,是由於在js中的參數在內部是用一個數組來表示。函數接收到的始終是這個數組,而不關心數組中包含哪些參數,若是這個數組不包含任何參數也無所謂,包含多個參數也沒問題,在函數體內能夠經過arguments(參數)對象來訪問這個參數數組,從而獲取傳遞給參數的每一個參數。 arguments對象和數組對象相相似,能夠經過下標來獲取傳入的每個元素(第一個元素是arguments[0]);也可使用length屬性來肯定傳遞進來多少個參數。數組
function say(name, message){ console.log('Hello' + arguments[0] + arguments[1]); console.log(arguments.length); } say('World!', 'ByeBye!’);
或者函數
function say(){ console.log('Hello' + arguments[0] + arguments[1]); console.log(arguments.length); } say('World!', 'ByeBye!’); 控制檯打印效果都是同樣的;即: HelloWorld!ByeBye! 2
即:在這裏你能夠這樣理解;當發生函數調用的時候,實參被保存在叫作arguments的「數組」當中;而arguments中對應下標的值在發生函數調用的時候始終與被調用函數的參數保持一致;spa
function say(name, message){ console.log(arguments[1] == message); arguments[1] = 'World!'; console.log(arguments[1] == message); } say('World!', 'ByeBye!’); //控制檯打印:true;true;
不過並非說讀取這兩個值會訪問相同的內存空間,他們的內存空間是獨立的,但他們的值會同步,這種同步是單向的,也就是參數的改變不會改變argumens中對應的值。code
function say(name, message){ console.log(arguments.length); } say('World!'); //控制打印:1;
arguments對象的長度是由傳入的參數個數決定,不禁定義函數的參數的個數決定。對象