`

javascript 函数详解2 -- arguments

阅读更多

今天我们接着上篇文章来继续javascript函数这个主题。今天要讲的是函数对像中一个很重要的属性--arguments。

相关阅读:

arguments对象参数数组引用

arguments是函数对象内部一个比较特殊的类数组对象,这个对象中包含了所属函数的参数列表,同时还包含一个指向函数原型对象的指针.

我 们先来讨论下arguments中的参数数组,我们可以直接使用[index]的类似访问数组的方式来访问参数。要真正理解这特性,我们先要知道 javascript的函数不关心你传递的参数,因为在调用函数的时候,在函数内部他接收的是一个参数数组,也就是说,理论上,我们可以在声明函数的时候 可以不声明任何参数,但是在调用的时候却可以传递任意多的参数。

如下代码示例:

    function sayHi(){
    var name = arguments[0]||"default name",
    greeting = arguments[1]||" how are you";
    console.log("Hello "+name+","+ greeting);
    }
    //不传参数调用
    sayHi();
    //传一个参数调用
    sayHi("John");
    //传两个参数调用
    sayHi("John","你好!");

执行结果:

接下来我们在看另外一段代码,来探索arguments对象与参数列表的引用关系。

    function dosum(op1,op2){
    arguments[1] = 20;
    console.log(arguments[0]+op2);
    }
    dosum(1,1);

我们先预测下执行结果,2还是21?

真正的执行结果如下:

针对上面的执行结果我们可以抽象下argument与参数数组间的引用管理模型。

arguments callee属性

arguments callee属性是一个指向函数对象的指针,灵活使用该属性可以大大降低代码与函数名的耦合度,同时可以使代码更加灵活。

降低耦合度一般在递归运算中体现比较明显。

如下代码:

    function factorial(num){
    if(num<=1){
    return 1;
    } else{
    return num*factorial(num-1);
    }
    }

上面这段代码最大的缺点就是与函数名factorial的耦合,正如我 们一开始讲的,函数名是一个指针,也就是一个变量,如果我们能保证该变量一直引用该函数对象,那么这段代码就一直能返回我们所期望的结果。一旦该变量指向 了其他对象,上面的代码就会出错,这时候 arguments.callee就能够发挥作用了。修改如下:

    function factorial(num){
    if(num <= 1){
    return 1;
    }else{
    return num * arguments.callee(num -1 );
    }
    }

这样,这个函数对象的计算结果就与函数名factorial没有关系了,就算之后做如下操作,我们依旧可以得到正确的结果。

var afunc = factorial;

factorial = null;

afunc(3); // 同样可以正确返回6

通过arguments.callee的另外一个比较灵活的应用如下:

    var otherfunc = (function(){
    console.log("do something cool");
    return arguments.callee;
    })();

上面代码所做的操作时立即执行了一个函数,并返回该匿名函数的引用,赋值给otherfunc,这时我们就可以在其他地方继续调用这个函数。

这样的用法是我在项目中遇到的,页面初始化时要做一些操作,也就是页面加载完成后立即执行该函数,但是这个函数并不是一次性的,我们还需要在该页面的其他时候来调用这个函数,上面的代码,个人会比先声明一个函数,然后在页面加载完成后调用要优雅一些,见仁见智罢了。

原文来自:javascript 函数详解2 -- arguments

分享到:
评论

相关推荐

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

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

    javascript内置对象arguments详解

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

    javascript中arguments,callee,caller详解

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

    Javascript中arguments对象详解

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

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

    ECMAScript中的函数并不...由于JavaScript允许函数有不定数目的参数,所以我们需要一种机制,可以在 函数体内 部读取所有参数。这就是arguments对象的由来。这篇文章将详细介绍Javascript中的arguments对象和使用方法。

    详解JavaScript自定义函数

    一、定义方法:在Javascript中必须用function关键字 function funcName(arg1,arg2...) { statements; return 变量值; //返回值可以根据函数的需要 } 函数名是函数自身的一个引用。此种方式创立的函数引用是独立存在...

    JavaScript arguments.callee作用及替换方案详解

     arguments 的主要用途是保存函数参数, 但这个对象还有一个名叫 callee 的属性,返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文,这有利于匿名函数的递归或者保证函数的封装性。  请看下面...

    JavaScript函数内部属性和函数方法实例详解

    函数内部属性只要包括两个特殊的对象:arguments和this。 函数属性包括:length和prototype 函数方法(非继承)包括:apply()和call() 继承而来的函数方法:bind()、toString()、toLocaleString()、valueOf() ...

    JavaScript function函数种类详解

    普通函数:介绍普通函数的特性:同名覆盖、arguments对象、默认返回值等。 匿名函数:介绍匿名函数的特性:变量匿名函数、无名称匿名函数。 闭包函数:介绍闭包函数的特性。   1. 普通函数 1.1 示例 function ...

    详解JavaScript函数callee、call、apply的区别

    arguments.callee 关于callee的解释:callee 是 arguments 对象的一个属性。可以用于引用该函数的函数体内当前正在执行的函数。这在函数的名称是未知时很有用,例如在没有名称的函数表达式 (也称为“匿名函数”)内...

    JavaScript函数参数的传递方式详解

    JavaScript使用一个变量对象来追踪变量的生存期。基本类型值被直接保存在变量对象内;而引用类型值则作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。 基本类型值的传递 向参数传递基本类型值...

    理解Javascript_14_函数形式参数与arguments

    在'执行模型详解'的'函数执行环境'一节中对arguments有了些许的了解,那么让我们深入的分析一下函数的形式参数与arguments的关系。

    详解JavaScript时间格式化

    感谢某前辈写的JS格式化日期和时间JS代码,很好很强大!!! ... • arguments:该对象代表正在执行的函数和调用它的函数的参数。不可显式创建,虽然有length属性,且能像数组一样以“[]”语法方

    详解JS函数重载

    本文主要介绍了利用JavaScript中的特殊对象arguments来模拟函数重载的解决方案,非常的实用,给需要的小伙伴参考下

    Javascript基础教程之argument 详解

    argument是javascript中函数的一个特殊参数,例如下文,利用argument访问函数参数,判断函数是否执行 代码如下: [removed]  function sayHello () {  if (arguments[0] == “bye”)  return;  else  alert&#40...

    详解JavaScript的闭包、IIFE、apply、函数与对象

    3.1、参数对象 (arguments) 3.2、构造函数 3.3、函数调用 3.3.1、call 3.3.2、apply 3.3.3、caller 3.3.4、Callee 3.5、立即执行函数表达式 (IIFE) 3.5.1、匿名函数与匿名对象 3.5.2、函数与函数表达式 3.5.3、...

    js函数调用常用方法详解

    来源 javascript语言精粹。这不是书上的源代码。 js的函数调用会免费奉送两个而外的参数就是 this 和 arguments 。arguments是参数组,他并不是一个真实的数组,但是可以使用.length方法获得长度。 书上有说4中调用...

Global site tag (gtag.js) - Google Analytics