首页 > 专栏 > 前端 > 文章详情
arguments 的一些其他用法 发布于:2021-03-06 15:29:25   原创发表   查看:3  讨论:0

在JavaScript中,arguments是对象的一个特殊属性。arguments对象就像数组,但是它却不是数组。

argument 对象包含了函数调用的参数数组,通过这种方式你可以很方便的找到最后一个参数的值。
  • arguments是收到的实参副本。在词法分析中, 首先按形参形成AO的属性,值为undefined,当实参传来时, 再修改AO的相应属性。
  • 并把所有收到实参收集起来,放到一个arguments对象里t(a,b,c){},调用时: t(1,2,3,4,5) 5个参数。此时 , AO属性只有a,b,c,3个属性, arguments里有1,2,3,4,5, 所有的值。
属性:length, 获取arguments对象的长度。callee, 引用当前正在执行的函数。f4u易塔云建站-模板下载,web开发资源,技术博客
实例:参数的长度。
window.onload = function(){f4u易塔云建站-模板下载,web开发资源,技术博客
    abc(1,2,3);f4u易塔云建站-模板下载,web开发资源,技术博客
}f4u易塔云建站-模板下载,web开发资源,技术博客
function abc(){f4u易塔云建站-模板下载,web开发资源,技术博客
    //虽然这里没有引用参数,但是arguments仍能捕获到f4u易塔云建站-模板下载,web开发资源,技术博客
    alert(arguments.length);f4u易塔云建站-模板下载,web开发资源,技术博客
}//output 3
f4u易塔云建站-模板下载,web开发资源,技术博客
改变参数的值。f4u易塔云建站-模板下载,web开发资源,技术博客
 
function abc(x,y,z){f4u易塔云建站-模板下载,web开发资源,技术博客
arguments[2] = "hello";f4u易塔云建站-模板下载,web开发资源,技术博客
for(var i=0;i<arguments.length;i++){f4u易塔云建站-模板下载,web开发资源,技术博客
alert(" "+arguments[i]);f4u易塔云建站-模板下载,web开发资源,技术博客
}f4u易塔云建站-模板下载,web开发资源,技术博客
}f4u易塔云建站-模板下载,web开发资源,技术博客
abc(1,2,3)//output: 1 2 hello
f4u易塔云建站-模板下载,web开发资源,技术博客
递归求值。f4u易塔云建站-模板下载,web开发资源,技术博客
f4u易塔云建站-模板下载,web开发资源,技术博客
求1~n的任意自然数之和:f4u易塔云建站-模板下载,web开发资源,技术博客
 
function getSum(n){f4u易塔云建站-模板下载,web开发资源,技术博客
    var sum = '';f4u易塔云建站-模板下载,web开发资源,技术博客
    if(n>=0){f4u易塔云建站-模板下载,web开发资源,技术博客
        for(var i=0; i<n+1; i++){f4u易塔云建站-模板下载,web开发资源,技术博客
            sum = (n*n + n) / 2 ;f4u易塔云建站-模板下载,web开发资源,技术博客
        }f4u易塔云建站-模板下载,web开发资源,技术博客
    }else{f4u易塔云建站-模板下载,web开发资源,技术博客
        return false;f4u易塔云建站-模板下载,web开发资源,技术博客
    }f4u易塔云建站-模板下载,web开发资源,技术博客
    return sum;f4u易塔云建站-模板下载,web开发资源,技术博客
}f4u易塔云建站-模板下载,web开发资源,技术博客
var result = getSum(10);f4u易塔云建站-模板下载,web开发资源,技术博客
console.log(result);//
f4u易塔云建站-模板下载,web开发资源,技术博客
然而昨晚之后发现没用到递归,递归的思想是在函数内部再调用函数,如此往复。f4u易塔云建站-模板下载,web开发资源,技术博客
 
var startTime = new Date();f4u易塔云建站-模板下载,web开发资源,技术博客
function getSum(n){f4u易塔云建站-模板下载,web开发资源,技术博客
    var sum = '';f4u易塔云建站-模板下载,web开发资源,技术博客
    if(n<=0){f4u易塔云建站-模板下载,web开发资源,技术博客
            return false;f4u易塔云建站-模板下载,web开发资源,技术博客
    }else{f4u易塔云建站-模板下载,web开发资源,技术博客
        sum = n + arguments.callee(n-1);f4u易塔云建站-模板下载,web开发资源,技术博客
        // console.log(sum);f4u易塔云建站-模板下载,web开发资源,技术博客
    }f4u易塔云建站-模板下载,web开发资源,技术博客
    // console.log("---");f4u易塔云建站-模板下载,web开发资源,技术博客
    return sum;f4u易塔云建站-模板下载,web开发资源,技术博客
}f4u易塔云建站-模板下载,web开发资源,技术博客
var result = getSum(100);f4u易塔云建站-模板下载,web开发资源,技术博客
console.log(result);//f4u易塔云建站-模板下载,web开发资源,技术博客
var endTime = new Date();f4u易塔云建站-模板下载,web开发资源,技术博客
console.log("花费时间" + (endTime-startTime) + "毫秒");
f4u易塔云建站-模板下载,web开发资源,技术博客
使用递归继续做阶乘运算,注意不是矩阵。。。f4u易塔云建站-模板下载,web开发资源,技术博客
 
var startTime = new Date();f4u易塔云建站-模板下载,web开发资源,技术博客
function getSum(n){f4u易塔云建站-模板下载,web开发资源,技术博客
    var sum = '';f4u易塔云建站-模板下载,web开发资源,技术博客
    if(n<=1){f4u易塔云建站-模板下载,web开发资源,技术博客
            return sum = 1;f4u易塔云建站-模板下载,web开发资源,技术博客
    }else{f4u易塔云建站-模板下载,web开发资源,技术博客
        return sum = n * arguments.callee(n-1);f4u易塔云建站-模板下载,web开发资源,技术博客
    }f4u易塔云建站-模板下载,web开发资源,技术博客
}f4u易塔云建站-模板下载,web开发资源,技术博客
var result = getSum(4);f4u易塔云建站-模板下载,web开发资源,技术博客
console.log(result);//f4u易塔云建站-模板下载,web开发资源,技术博客
var endTime = new Date();f4u易塔云建站-模板下载,web开发资源,技术博客
console.log("花费时间" + (endTime-startTime) + "毫秒");

评论

  • 匿名