本文详细解析JavaScript中arguments对象的特性。作为函数内置对象,它存储了调用时传递的所有实参,可通过索引访问,但并非真正的数组,不支持shift等数组方法。文章通过求和、求最大值及递归计算阶乘三个实例,演示了arguments的实际应用,并重点讲解了callee属性在匿名函数递归中的作用与限制。
前言
JavaScript属于弱类型语言,与C、Java等具有严格规范的语言不同,
因此业界存在一种观点认为JavaScript本质上并非传统意义上的编程语言;
回到arguments话题,它是JavaScript函数内部内置的一个对象,函数执行时传入的所有实参值均存储在该对象中;
若要获取这些实参,需像操作数组一样通过下标或索引定位具体数值,但arguments并非真正的数组,因为它还包含其他属性(如callee);
此外,不能对arguments直接调用shift、push、join等数组方法。对于未传递值的命名参数,系统会自动赋予undefined;
具体表现如下图所示:

(若需获取非实参的其他属性,必须使用具体的属性名进行访问;)
arguments实例一:
计算任意数值的总和
<script>
function sum(){
var result = 0;
for(var i = 0;i<arguments.length;i++){
result+=arguments[i];
}
return result;
}
window.onload = function(){
alert(sum(1,2,3,4,5,6,7,9));
}
</script>
实例二:
求给定任意值中的最大值
<script>
function Max(){
var maxValue = arguments[0];
for(var i=1; i<arguments.length; i++){
if(maxValue < arguments[i]){
maxValue = arguments[i];
}
}
console.log(arguments);
return maxValue;
}
console.log(Max(1,23,0,-1000,100,5,54)); // 100
</script>
callee属性的作用是返回当前正在执行的函数对象,该属性仅在相关函数执行期间有效;
利用这一特性可以实现函数的递归调用;
<script>
function factorial(n){
if (n <= 0){
return 1;
} else{
return n * arguments.callee(n-1);
// return n*factorial(n-1);函数本身的递归
}
}
alert(factorial(5)); // 120
</script>
总结
至此,关于JavaScript中arguments使用的介绍已结束,更多相关JS中arguments使用内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!