开启辅助访问
帐号登录 |立即注册

js之argument详解

 
arguments是什么呢?
它是一个对象,是一个长的很像数组的对象。
arguments包含什么内容呢?
它是函数运行时的实参列表。
我们来实际操作一下看arguments里到底有什么
js代码


控制台打印


这里我们可以看到arguments对象将我传入的1个参数以数组的形式保存在里面,还有保存了我传入函数的实参的个数(length)。而且我们可以看到arguments对象的 __ proto __ 是指向object的,这也说明了他是个类数组对象,而不是一个数组。我们可以直接用arguments.length直接获取实参个数,arguments还有一个属性callee,可看出callee中装了当前正在运行的函数。我们调用的这个函数的代码,实在无法理解的时候,又到了console.log大显身手的时候了。

function showcallee() {
    var a = '这里是代码';
    var b = '这是另一段代码';
    var c = a + b;
    console.log(arguments.callee);
    return c;
}
showcallee();
看到结果的你是不是和我一样惊呆了呢,这不就是我写的代码吗,arguments.callee完完整整的把这个函数的这段代码返回了。


arguments的一些妙用,实例一:
计算任意数值的和
<script>
function sum(){
var result = 0;
for(var i = 0;i<arguments.length;i++){
result+=arguments
;
}
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
){
maxValue = arguments
;
}
}
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>

回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

友情链接
  • 艾Q网

    提供设计文章,教程和分享聚合信息与导航工具,最新音乐,动漫,游戏资讯的网站。