arguments用法

2019-08-22  本文已影响0人  Artifacts

参考
arguments指的是函数内置的实参集合
JS的一个内置对象,JS传的是形参,可传可不传,若方法里没有写参数却传入了参数,需要用arguments拿到参数

var args = Array.prototype.slice.call(arguments);  //现在args就是一个标准的js数组了,可以使用数组的标准方法了。
arguments[0],arguments[1],.....arguments[n],

在js中 不需要明确指出参数名,就能访问它们,例如:

function test() {
        var s = "";
        for (var i = 0; i < arguments.length; i++) {
            alert(arguments[i]);
            s += arguments[i] + ",";
        }
        return s;
    }
    test("name", "age")

输出结果:

name,age

每一个对象都有自己的属性,arguments对象也不例外,首先arguments的访问犹如Array对象一样,
用0到arguments.length-1来枚举每一个元素。下面我们来看看callee属性,返回正被执行的 Function 对象,
也就是所指定的 Function 对象的正文。callee 属性是 arguments对象的一个成员,仅当相关函数正在执行时才可用。
callee 属性的初始值就是正被执行的 Function 对象,这允许匿名的递归函数。

var sum = function (n) {
        if (1 == n) {
            return 1;
        } else {
            return n + arguments.callee(n - 1);
        }
    }
    alert(sum(6));

通俗一点就是,arguments此对象大多用来针对同个方法多处调用并且传递参数个数不一样时进行使用。根据arguments的索引来判断执行的方法。


// arguments函数内置的实参集合
// 任意数求和(执行函数的时候,传递N个值实现求和)
/*
 *1.传递实参的个数不定
 *2.传递的值是否为有效数字不定
 *  =>把传递的有效数字进行相加求和 
 * arguments函数内置的实参集合
 * 1.类数组集合,集合中存储着所有函数执行时,传递的实参信息
 * 2.不论是否设置形参,arguments都存在
 * 3.不论是否传递实参,arguments也都存在
 * argumenys.callee:存储的是当前函数本身(js严格模式下禁止使用这些属性)
 */
function sum(){
    // console.log(arguments,n,m);
    let total = null;
    for(let i = 0;i<arguments.length;i++){
        // 获取的每一项的结果都要先转化为数字(数学运算)
        let item = Number(arguments[i]);
        // 非有效数字不加
        if(isNaN(item)){
            continue;
        }
        total +=item;
    }
    return total;
}
let total = sum(10,20,30,40);
console.log(total);//100

total = sum(10,20);
console.log(total);//30

total = sum(10,20,'30');
console.log(total);//3030

total = sum(10,'AA');
console.log(total);//30AA
上一篇下一篇

猜你喜欢

热点阅读