argument
1.Arguments对象
1)作用:用于储存调用函数时的所有实参。
当调用函数,并用实参赋值时,实际上参数列表已经保存到arguments数组中,可以在函数中,使用arguments[n]的形式调用,n从0开始。
2)arguments数组的个数,取决于实参列表,与形参无关。但是,一旦第n个位置的形参、实参、arguments都存在时,形参将与arguments绑定,同步变化。即,在函数中,修改形参的值,arguments也会改变,反之亦成立。
3)arguments.callee是arguments的重要属性。表示arguments所在函数的引用地址;
在函数里面,可以使用arguments.callee()调用函数本身。
在函数内部,调用函数自身的写法,叫做递归。
递归分为两部分:递和归。以递归调用语句为界限,可以将函数分为上下两部分。
递:当函数执行上半部分。遇到自身的调用语句时,继续进入内层函数,再执行上半部分。直到执行完最内层函数。
归:当最内层函数执行以后,再从最内层函数开始,逐渐执行函数的下半部分。
有了这个对象我们以后写函数的时候,就不用给所有的形参指定参数名,然后通过参数名的方式获取参数了,我们可以直接使用arguments对象来获取实参,我们使用arguments调用参数可以不混淆不同函数之间的参数名,我们也能用arguments来判断当前传入参数的个数是否与我们需要的数量一致
function add() {
if( arguments.length == 2 ){
return arguments[0] + arguments[1];
}else{
return '传入参数不合法';
}
}
console.log( add(2,3) );
console.log( add(1,2,3) );
结果为:
argument的callee属性
简单点说,这个属性里面存储的我们调用的这个函数的代码
function showcallee() {
var a = '这里是代码';
var b = '这是另一段代码';
var c = a + b;
console.log(arguments.calle