`

深入理解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 在JavaScript中,函数的形式参数和arguments之间存在着微妙的关系。为了深入理解这方面的知识,我们需要首先了解形式参数和实际参数的概念。形式参数指的是定义方法时所明确...

    深入理解JavaScript系列(12) 变量对象(Variable Object)

    JavaScript是一种在浏览器和服务器端广泛使用的编程语言,它支持面向对象、命令式、...理解变量对象的工作原理,有助于深入理解JavaScript的作用域、变量提升和闭包等高级特性,对于编写出可维护和高效的代码非常重要。

    深入解析JavaScript中的arguments对象

    深入理解JavaScript中的arguments对象对于编写灵活的函数代码非常有帮助,尤其是在处理可变参数函数和递归函数时。尽管arguments对象不是数组,但通过上述方法可以将其转换成数组进行操作,且它提供的caller和callee...

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

    首先,让我们深入了解一下`arguments`对象。`arguments`是JavaScript函数内部的一个特殊变量,它是一个类数组对象,包含了函数调用时传入的所有参数。`arguments`不仅有`length`属性,表明传入参数的数量,还有`...

    javascript中arguments,callee,caller详解

    了解和掌握这些概念,对于深入理解JavaScript函数执行过程以及编写更加灵活、强大的函数代码都是非常有帮助的。当然,随着JavaScript语言的发展,新的函数特性比如箭头函数等可能会影响到arguments、caller和 callee...

    理解JavaScript的caller callee call apply

    ### 理解JavaScript中的`caller`, `callee`, `call`, `apply` #### Arguments对象:JavaScript函数调用的参数管理器 在JavaScript中,每个函数都有一个隐含参数`arguments`,它允许开发者访问传递给函数的所有参数...

    JavaScript权威指南(第5版)

    总的来说,《JavaScript权威指南(第5版)》是一本全面而深入的JavaScript教程,涵盖了从基础到高级的各个方面,对于想要深入理解和精通JavaScript的开发者来说,是一份不可多得的学习资料。通过阅读这本书,读者...

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

    在JavaScript中,`arguments` 和 `arguments.callee` 是两个非常重要的概念,它们在处理函数参数和...尽管 `arguments.callee` 在现代JavaScript中不建议使用,但理解这两个特性对于掌握JavaScript的高级用法至关重要。

    深入理解Javascript中的this关键字

    总之,深入理解JavaScript中的this关键字是提高编程技能不可或缺的一部分。通过掌握this在不同上下文中的行为和如何正确地控制this的绑定,开发者可以更有效地使用JavaScript编写出更加结构化和可重用的代码。

    深入理解JavaScript函数参数(推荐)

    JavaScript函数参数的理解是每个JavaScript开发者必须掌握的基础知识。在JavaScript中,函数参数具有以下几个关键特点: 1. **无类型检查**:JavaScript函数不关心传递的参数类型,这意味着你可以将任何类型的值...

    javaScript arguments 对象使用介绍

    首先,让我们深入理解`arguments`对象的用途。当函数被调用时,即使没有声明足够多的形参来接收所有的实参,`arguments`对象也会自动创建并存储所有的实参。例如,在以下示例中,`box`函数没有声明任何参数,但仍然...

    深入理解Javascript动态方法调用与参数修改的问题

    Javascript作为一门动态语言,提供了高度灵活的编程模式。在日常开发过程中,我们经常需要根据实际情况动态地调用方法并修改参数。...通过本文的介绍,希望大家能够更加深入地理解Javascript在这方面的高级特性。

    effective javascript-中文-带书签

    4. **函数**:深入理解函数表达式、函数声明、闭包和立即执行函数(IIFE),这些都是JavaScript中的重要概念。了解如何使用arguments对象,以及如何利用rest参数和默认参数来优化函数签名。 5. **异步编程**:...

    javascript函数中的arguments参数

    在JavaScript编程语言中,`arguments`对象是一个非常特殊且实用的特性,它允许开发者访问函数内部接收到的所有参数,无论这些参数是否已经被...理解这些特性对于深入掌握JavaScript函数的动态特性和灵活性至关重要。

    Javascript中的arguments对象

    在讨论arguments对象的作用之前,我们先简单理解JavaScript中的函数。JavaScript中的函数是一种特殊的对象类型。当我们定义一个函数时,实际上是在创建一个新的函数对象,并且函数名仅仅是这个函数对象的一个引用...

    JavaScript权威指南(第5版)中文版(下)

    《JavaScript权威指南(第5版)中文版(下)》这部分内容将帮助开发者深入理解JavaScript的高级特性,提高编程能力,为构建复杂的Web应用打下坚实基础。通过学习和实践,开发者可以更好地应对现代JavaScript开发中的挑战...

    解析 this.initialize.apply(this, arguments)

    总的来说,这个主题涵盖了JavaScript的高级特性和面向对象编程的核心概念,对于深入理解和应用JavaScript是至关重要的。通过学习和理解 `this.initialize.apply(this, arguments)` 这样的代码,开发者可以更好地掌握...

Global site tag (gtag.js) - Google Analytics