1. 程式人生 > 其它 >arguments,想說愛你不容易

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