我是靠谱客的博主 如意烧鹅,最近开发中收集的这篇文章主要介绍深入理解javascript之arguments,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文介绍arguments属性。
每一个函数在定义的时候都会有一个内置的arguments属性,这个arguments属性类似数组但又不是数组。它具有数组的访问方式和length属性,却又有caller,callee等属性。
我们来举一个arguments的使用例子:

var func = function(a,b){
  document.write(a+' '+b+' '+"<br>");
  document.write(arguments[0]+' '+arguments[1]+' '+arguments[2]+' '+"<br>");
}
func(1,2,3);
结果为:

1 2
1 2 3

可以看到,我们可以通过arguments来访问函数中的参数。但是可以发现一点,即使形参中只定义了两个,而实参出现三个,arguments也可以访问到。这是怎么回事呢?这里我们就需要介绍一下arguments的属性了。


caller

对于函数来说,caller 属性只有在函数执行时才有定义。假如函数是由顶层调用的,那么 caller 包含的就是 null 。假如在字符串上下文中使用 caller 属性,那么结果和 functionName.toString 相同,也就是说,显示的是函数的反编译文本。但是由于caller在后续版本会被弃用,这里就不详细介绍了。
以下代码可以看出两者的区别:

function inner(){
    console.log(arguments.callee);//指向拥有这个arguments对象的函数,即inner()
    console.log(arguments.callee.caller);//这个属性保存着调用当前函数的函数的引用,即outer()
    console.log(inner.caller);//[Function: outer]
}

function outer(){
    inner();
}
outer();

callee

callee 属性是 arguments 对象的一个成员,他表示对函数对象本身的引用,这有利于匿名函数的递归或确保函数的封装性。callee拥有length属性,这个属性有时候用于验证还是比较好的。arguments.length是实参度,arguments.callee.length是形参长度,由此能够判断调用时形参长度是否和实参长度一致。
看下面实例:

function func(a,b){
  document.write(a+' '+b+' '+"<br>");
  document.write(arguments[0]+' '+arguments[1]+' '+arguments[2]+' '+"<br>");
  document.write(arguments.length+"<br>");//实参个数
  document.write(arguments.callee.length+"<br>")//形参个数
}
func(1,2,3);

结果为:
1 2
1 2 3
3
2

callee还有一个作用就是用来调用函数自身,用法如下:

function commonParentNode(oNode1, oNode2) {
    if(oNode1.contains(oNode2)){
        return oNode1;
    }else if(oNode2.contains(oNode1)){
        return oNode2;
    }else {
        return arguments.callee(oNode1.parentNode,oNode2);//递归调用
    }
}

通过arguments.callee实现递归。

最后

以上就是如意烧鹅为你收集整理的深入理解javascript之arguments的全部内容,希望文章能够帮你解决深入理解javascript之arguments所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部