`

深入理解javascript之arguments

    博客分类:
  • js
阅读更多
写道
本文转自:http://blog.csdn.net/mevicky/article/details/47903457

如果转载,请写明出处
 本文介绍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在后续版本会被弃用,这里就不详细介绍了。


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实现递归。

 

布瑞泽的童话-博客 写道
http://blog.csdn.net/mevicky/article/details/47903457

 

分享到:
评论

相关推荐

    理解Javascript函数形式参数与arguments

    理解Javascript函数形式参数与arguments

    xiangxiong#blog#JavaScript深入之类数组对象与arguments1

    JavaScript深入之类数组对象与argumentsJavaScript深入系列第十三篇,讲解类数组对象与对象的相似与差异以及arguments的注意要点类

    【JavaScript源代码】JavaScript中arguments的使用方法详解.docx

    JavaScript中arguments的使用方法详解  js这是一门弱语言,不像其他语言如c,java等,有严格的规范, 所以现在也流传着一种说法,js本来就不是一种语言; 说回arguments,它是js中函数内置的一个对象,而执行函数...

    深入解析JavaScript中的arguments对象

    arguments是JavaScript里的一个内置对象,像数组结构一样存储参数的传递,这里我们就来深入解析JavaScript中的arguments对象,需要的朋友可以参考下

    【JavaScript源代码】javascript类数组的深入理解.docx

    javascript类数组的深入理解  js数组,相比大家都很熟悉,因为走到哪都要用,但它有个“双胞胎弟弟” ,叫类数组(也叫伪数组),可能有的人了解,有的人不了解,今天我们来看一看。 顾名思义,这玩意儿肯定是个长...

    Javascript中arguments和arguments.callee的区别浅析

    主要介绍了Javascript中arguments和arguments.callee的区别浅析,本文用一个实例来理解它们的区别,需要的朋友可以参考下

    Javascript中arguments用法实例分析

    主要介绍了Javascript中arguments用法,实例分析了javascript利用arguments实现模拟重载功能,需要的朋友可以参考下

    Javascript中arguments对象的详解与使用方法

    ECMAScript中的函数并不介意传递的参数有多少,也不介意是什么类型。由于JavaScript允许函数有不定数目的参数,所以我们需要一种机制,可以在 函数体内 ...这篇文章将详细介绍Javascript中的arguments对象和使用方法。

    javascript中arguments,callee,caller详解

    arguments是什么? arguments是函数调用时,创建的一个类似的数组但又不是数组的对象,并且它存储的是实际传递给函数的参数,并不局限于函数声明的参数列表哦。 尼玛,什么意思? 写个demo看看,代码见下 &lt;!...

    Javascript中arguments对象详解

    在上篇文章中我们讨论了javascript中的默认参数,这篇文章,我们来讨论下javascript的arguments参数对象。 如下例的一个函数,我们如何根据传入参数的不同来做不同的处理呢? 代码如下: function addAll () {  // ...

    深入浅析JavaScript中的arguments对象(强力推荐)

    1、在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。可以通过如下代码得以证实(当然,实际上,在函数funcArg中,调用...

    javascript内置对象arguments详解

    主要介绍了javascript内置对象arguments,实例讲解arguments是什么怎么用,需要的朋友可以参考下

    JavaScript中arguments和this对象用法分析

    本文实例讲述了JavaScript中arguments和this对象用法。分享给大家供大家参考,具体如下: 在函数内部有两个特殊的对象 : arguments和this。 1、arguments对象 js函数不介意定义多少参数,也不在乎传递进来多少参数,...

    javascript 利用arguments实现可变长参数

    javascript arguments解释,实现可变长参数。 在C#中,有可变长参数params[],但是在js中,如何实现这种可变参数呢? 一、可变长参数 arguments是非常好的解决方法,一直不知道javascript有这个东西。 先来看看应用...

    深入理解javascript函数参数与闭包

    最近在学习javascript的函数,函数是javascript的一等对象,想要学好javascript,就必须深刻理解函数。本人把学习的过程整理成文章,一是为了加深自己函数的理解,二是给读者提供学习的途径,避免走弯路。内容有些多...

    javascript利用apply和arguments复用方法

    主要介绍了javascript利用apply和arguments复用方法,有需要的朋友可以参考一下

    跟我学习javascript的arguments对象

    arguments 是是JavaScript里的一个内置对象,它很古怪,也经常被人所忽视,但实际上是很重要的。所有主要的js函数库都利用了arguments对象。所以agruments对象对于javascript程序员来说是必需熟悉的。在javascript...

Global site tag (gtag.js) - Google Analytics