1.搞清楚什么是arguments
“arguments?是一個對應(yīng)于傳遞給函數(shù)的參數(shù)的類數(shù)組對象。?arguments對象是所有(非箭頭)函數(shù)中都可用的局部變量。你可以使用arguments對象在函數(shù)中引用函數(shù)的參數(shù)。此對象包含傳遞給函數(shù)的每個參數(shù),第一個參數(shù)在索引0處?!? ?-- MDN
首先它是一個類數(shù)組對象,typeof arguments結(jié)果毫無疑問是"object",注意結(jié)果是字符串類型。接下來調(diào)用Object.prototype.toString.call(arguments),結(jié)果是從未見過的"[object Arguments]"。
2.轉(zhuǎn)換為數(shù)組
1.Array的silce方法
Array.prototype.slice.call(arguments)
2.Array.from
let re = Array.from(arguments)
3.拓展運(yùn)算符
let re = [...arguments]
3.arguments到類數(shù)組
類數(shù)組必須有l(wèi)ength屬性,具有索引屬性,下面結(jié)合代碼說明:
let obj = {
? ? ? ? ? ? "0": 'a',
? ? ? ? ? ? "1": 'b',
? ? ? ? ? ? "2": 'c',
? ? ? ? ? ? length: 3,
? ? ? ? ? ? "push": Array.prototype.push,
? ? ? ? ? ? "splice": Array.prototype.splice
? ? ? ? }
? ? ? ? obj.push('d')
? ? ? ? console.log(obj)?

實(shí)際執(zhí)行過程相當(dāng)于:
obj[obj.length] = 'd';
obj.length++;
4.面試題
var length = 10;
? ? ? ? function fn(){
? ? ? ? ? ? console.log(this.length)
? ? ? ? }
? ? ? ? var obj = {
? ? ? ? ? ? length: 5,
? ? ? ? ? ? getF: function(fn) {
? ? ? ? ? ? ? ? fn();
? ? ? ? ? ? ? ? arguments[0]();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? obj.getF(fn);
考察的是arguments和this指向問題,結(jié)果為10 1.