`
usejava
  • 浏览: 72501 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

javascript Arguments对象——函数的实际参数 转

阅读更多

在javascript函数体内,标识符arguments具有特殊含义。它是调用对象的一个特殊属性,用来引用Arguments对象。Arugments对象就像数组,注意这里只是像并不是哈。

javascript函数体内,arguments像数组(并不是真的数组,是一个Arguments对象,再次强调)一样,有length属性,可以代表传给函数的参数的个数。

引用一个形式参数可以用参数名,也可以用arguments[]数组形式,其中arguments[0]表示第一个参数。

所以,javascript中Arguments对象是函数的实际参数,下面,我们一起来进入这神奇的国度,一窥究竟。

arguments.length属性:

js不会主动为你判断你到底给函数传了多少个参数,如果你多传了,多余的部分就没有被使用,如果你少传了,那么没传的参数值就是undefined

所以我们可以借助arguments的length属性来检测调用函数时是否使用了正确数目的实际参数,因为javascript是不会为你做这些事的

function f(x,y,z)
{
    //首先检查传递的参数数量是否正确
    if(arguments.length != 3)
    {
        throw new Error("function f called with " + arguments.length + "arguments ,but it not 3 arguments.");
    }
    //下面运行真正的函数
}

arguments还为我们提供了这样一种可能,就是为一个函数传任意数目的实际参数:

比如说,我想判断你传给我的一些数字的大小,取出最大的那个,对,没错,你传多少参数都行,但是前提是你要传数字,因为我在函数内部懒得判断了。呵。

function max()
{
    //根据我上一篇日志,这已经是JavaScript内最小的数字了
    var m = Number.NEGATIVE_INFINITY;
    for(var i = 0; i < arguments.length; i++)
    {
        //只要有任何一个参数比m大,那么m就变成了这个参数的值
        if(arguments[i] > m)
            m = arguments[i];
    }
    return m;
}

怎么样?这个方法很巧妙吧?呵呵。

说明一下arguments与真正传的形式参数是一致的:

比如,你给函数传了一个叫param的参数,并且只有这一个参数,那么param与arguments[0]都是对这个参数值的引用,

改变其中一个值,即改变了二者所有的值

function change(param)
{
    //比如我传的param为simaopig,那么alert就是simaopig,
    //如果啥也没传就会alert undefined
    alert(param);
    //用arguments[0]改变了这个参数的值
    arguments[0] = 'xiaoxiaozi';
    //没错,这个值变成了xiaoxiaozi
    alert(param);
}

arguments的callee属性:

arguments的callee属性是用来引用当前正在执行的函数,这对未命名的函数调用自身非常有好处。

还记得我上一篇中用函数直接量定义的函数实现递归的函数吗?

那里面,我提到可以为函数直接量以函数名。这样实现递归可以很方便的调用自己。

现在用arguments的这个callee同样可以简单的实现

//用函数直接量,采用arguments.callee属性实现递归函数
var result = function(x){
    if(x<=1) return 1;
    return x*arguments.callee(x-1);
};

在最后提醒大家一点,既然这个arguments这么厉害,那么我们就不要为变量命名为arguments了,事实上arguments是javascript的保留字之一。

分享到:
评论

相关推荐

    Arguments对象作用深度研究.pdf

    Arguments对象是JavaScript中一个特殊的数据结构,主要用于在函数内部存储传递给函数的所有参数。无论函数定义了多少个参数,Arguments对象都会包含所有实际传递的参数。这篇深度研究主要探讨了Arguments对象的几个...

    javascript arguments 传递给函数的隐含参数

    总之,`arguments`对象是JavaScript函数中一种非常重要的机制,它提供了一种访问函数参数的方式,增强了JavaScript函数的灵活性。通过`arguments`对象,我们可以编写出能够处理不定数量参数的函数,并且可以通过`...

    细说javascript函数从函数的构成开始.docx

    本文将从JavaScript函数的基本构成入手,探讨其特性及其在实际应用中的意义。 #### 二、函数名与匿名函数 在大多数面向对象的语言中,函数通常都会有一个明确的名字,这有助于理解和调用。然而,在JavaScript中,...

    Javascript學習筆記——JS的函數

    ES6引入的新特性,使函数参数处理更加灵活: ```javascript function greet(name = 'World') { console.log('Hello, ' + name); } greet(); // 输出 "Hello, World" let [first, ...rest] = ['a', 'b', 'c']; ...

    JavaScript函数-深入解析与使用指南(很详细)

    1. **模块化**: 通过将代码分割成小的独立单元——函数,可以更容易地管理和维护整个程序。每个函数负责单一的功能,有助于提高代码的可读性和可维护性。 2. **抽象性**: 函数可以隐藏内部实现细节,仅对外提供接口...

    JavaScript程序设计ES之剩余参数rest参数共2

    在这个主题中,我们将深入探讨JavaScript程序设计中的一个关键概念——剩余参数(Rest Parameters),这是ES6引入的一项重要特性。 剩余参数允许我们在函数定义中使用三个点(...)来收集传入的任意数量的参数,...

    浅析JavaScript 箭头函数 generator Date JSON

    3. **无`arguments`绑定**:箭头函数没有自己的`arguments`对象,如果需要参数列表,可以通过剩余参数(rest parameters)`...`来获取。 4. **不能作为Generator函数**:箭头函数不能用作生成器(generator)函数,...

    深化浅析JavaScript中的Function类型_.docx

    5. **函数内部属性**:函数内部有两个特殊的对象——`arguments`和`this`。 - `arguments`对象:它是一个类数组对象,包含了传入函数的所有参数。`arguments.callee`属性指向包含该`arguments`对象的函数,但在ES5...

    javascript,php获取函数参数对象的代码

    ——————————————————————————– 这个有点类似于php 中的 func_get_args() 函数,也是获取函数参数的数组。 例(以下是php代码): 复制代码 代码如下: function uses () { $args =func_get_...

    浅谈JavaScript function函数种类

    普通函数还涉及到一个特殊的对象——arguments,它包含了传递给函数的所有参数,这在参数数量不定的情况下非常有用。如果函数没有返回值,那么其返回值默认为undefined。 匿名函数是函数名缺失的一种函数表达式,...

    匿名函数的一点知识

    标签清晰地指出了文档的核心主题——JavaScript语言下的匿名函数。这不仅限定了讨论范围,也便于对该主题感兴趣的读者快速定位到相关资源。 #### 部分内容详解: 文档的部分内容涉及到了匿名函数的各种应用场景和...

    Javascript学习笔记___自学实用

    JavaScript学习笔记——深入理解基础与函数 在JavaScript中,学习基础知识是至关重要的,因为它是所有进一步编程技巧的基础。首先,我们需要了解JavaScript中的数据类型。在JavaScript中,有五种简单的数据类型:...

    Javascript 面向对象之重载

    首先,JavaScript中的函数参数是通过一个名为arguments的对象来传递的。这个对象包含了所有传递给函数的参数,而不仅仅是函数声明定义的参数列表。_arguments_对象具有一个length属性,它可以用来判断实际传递给函数...

    ES6箭头函数详解:语法、特性及其应用

    然后重点讲解了箭头函数的几个重要特性,包括不绑定自身的this值而继承外部上下文的this值,不可用作构造器创建新实例对象以及不能访问arguments伪数组等问题。最后提供了多个具体的代码实例帮助理解。 适用人群:...

    JavaScript语言参考.rar

    函数可以接受参数,并通过`arguments`对象访问未指定参数名的额外参数。另外,JavaScript还支持闭包,即一个函数可以访问并操作其外部作用域的变量,即使在其外部函数已经执行完毕后。 异步编程是JavaScript的另一...

    JavaScript中callee和caller的区别与用法实例分析

    虽然arguments的主要用途是保存函数参数,但这个对象有一个属性——callee,该属性是一个指针,指向拥有这个arguments对象的函数 所以callee的作用就是来指向当前对象 看一个阶层函数的例子就会明白他的用途了: /*...

    jQuery自定义插件开发基础1——jQuery实用函数的实现

    这可以通过在函数内部使用`arguments`对象或设置默认值来实现。 ```javascript $.fn.myFunction = function(options) { var defaults = { param1: 'default1', param2: 'default2' }; var settings = $....

    JavaScript定义函数_动力节点Java学院整理

    rest参数必须位于函数参数列表的末尾,并且只能出现一次。 对于参数的处理,JavaScript允许在调用函数时传递比定义的参数多或少的参数。如果传递的参数比定义的少,那么未定义的参数将默认为`undefined`;如果传递...

    提升JavaScript生产力的“异样”编程手段

    - JavaScript拥有独特的作用域机制——基于函数的作用域。闭包是函数和与其相关的引用环境的组合,允许函数访问并操作其定义时所在环境中的变量。这种能力在编写异步代码或处理事件驱动逻辑时尤其强大。 3. **...

    es6函数之rest参数用法实例分析

    在编写JavaScript代码时,尤其是在处理函数参数时,考虑使用rest参数可以提升代码质量。通过实践和理解rest参数,可以更好地运用在实际项目中,提高开发效率。如果想进一步探索JavaScript的相关知识,可以查阅...

Global site tag (gtag.js) - Google Analytics