arguments,想說愛你不容易
HTML5學堂-碼匠:arguments是關於函式引數的一個知識點,也是很多企業面試時的“必考點”,arguments和形參有何不同?如何去檢測實參或形參的長度?一起來看看吧!
什麼是arguments
arguments是一個類陣列。
類陣列
類陣列:擁有length屬性,其它屬性(索引)為非負整數,但並不具有陣列的方法。
典型的類陣列
典型的類陣列:DOM節點列表(通過DOM操作獲取的標籤列表)、arguments。
形參與實參
什麼是形參
形參:表示的是“形式引數”,是在定義函式名和函式體時使用的引數,用於接收呼叫該函式時傳遞的引數。
形參的作用
實現主調函式與被調函式之間的聯絡。
函式的形參意義何在
將“函式所處理的資料”,“影響函式功能的因素”或“函式處理的結果”作為形參。主要目的在於——提升函式的複用性。
什麼是實參
表示的是“實際引數”,是在函式呼叫時,傳入函式的內容。實參可以是常量、變數、表示式、函式等, 但是,無論實參是何種型別的量,在進行函式呼叫時,它們都必須具有確定的值。
arguments與引數的關係
arguments與實參
arguments物件的長度是由實參個數決定的(不是形參個數)。換言之,arguments接收到的是實參的值,而形參是函式內部“重新開闢”記憶體空間儲存的變數(也就是區域性變數)。
function h5course(name) { console.log(name); console.log(arguments[0]); } h5course('HTML5學堂');
執行結果:
'HTML5學堂'
'HTML5學堂'
記憶體空間問題
形參的空間與arguments物件記憶體空間並不重疊。
如果形參和arguments都存在,則這兩者值是同步的;
如果形參和arguments當中,有其中之一無值,則此值不會得以同步。
function h5course(name) {
console.log(name);
arguments[0] = '碼匠';
console.log(name);
}
h5course('HTML5學堂');
執行結果:
'HTML5學堂' '碼匠'
function h5course(name, age) { console.log(age); console.log(arguments[1]); arguments[1] = 2; console.log(age); console.log(arguments[1]); } h5course('HTML5學堂');
執行結果:
'undefined'
'undefined'
'undefined'
2
arguments.callee
arguments.callee的作用
arguments.callee 屬性表示當前正在執行的函式。
function h5course(name, age) {
console.log(arguments.callee);
}
h5course('HTML5學堂');
執行結果:
function h5course(name, age) {
console.log(arguments.callee);
}
獲取形參與實參的長度(數量)
使用arguments.callee.length檢測形參的數量(長度);
使用arguments.length檢測實參的數量(長度)。
function h5course(name, age) {
console.log(arguments.length);
console.log(arguments.callee.length);
}
h5course('HTML5學堂');
執行結果:
1
2