Javascrip中每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。
function computed() {
console.log(arguments)
}
computed(1, 2, 3)
// Arguments(3)[1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
// 0: 1
// 1: 2
// 2: 3
// length: 3
// callee: ƒ computed()
// Symbol(Symbol.iterator): ƒ values()
// __proto__: Object
所以可以以数组的方式将传入的参数取出来
function computed() {
console.log(arguments[0]+arguments[1]) //3
}
computed(1, 2)
如果传入参数的话,参数和arguments属于映射关系,一个改变,另外一个值也会改变。形参数大于实参数,则arguments为undefined
function computed(a, b) {
console.log(a)//1
arguments[0] = 10;
console.log(a)//10
a = 1;
console.log(a)//1
console.log(arguments[2])//undefined
}
使用arguments我们可以自己来封装一个数组的push方法,非常简单。
Array.prototype.push = function(){
for(i=0;i<arguments.length;i++){
//this指向调用该函数的数组,每次赋一个值,该数组的长度就会加1
this[this.length] = arguments[i]
}
}
var a = []
a.push(1,2,3)