• js参数arguments的理解


    原文地址:js参数arguments的理解

    对于函数的参数而言,如下例子

    function say(name, msg){
     
    alert(name + 'say' + msg);
     
    }
     
    say('xiao', 'hello');
    

    当调用say()函数时,函数会创建arguments参数数组,这个数组跟形参没有多大关系,即使没有形参,

    function say(){
    alert(arguments[0] + 'say' + arguments[1]);
    }
    say('xiao', 'hello');
    

      

    在函数内部可以使用arguments参数数组的形式调用。这就说明命名的参数即形参不是必须的,只是为了提供便利。

    如果没有形参,我们可以在函数内部利用arguments数组的长度来判断参数的个数,从而执行相应的代码,可以达到函数重载的效果。

    还有就是,既然我们有形参的存在,那么形参跟arguments数组有什么关系呢?

    可以算得上是一一对应的关系,如果我们参数有3个,而传递的只有2个,那么第三个形参的值就默认为undefined,就跟定义了这个变量没有给他初始化一样。

    function say(name,msg,str){
    alert(str);
    }
    say('xiao', 'hello'); //undefined
    

      

    形参的值跟一一对应的arguments参数数组中的值始终保持同步的。

    function doAdd(num1, num2){
     num1 = 10;
     alert(arguments[0]);
    }
    doAdd(5, 5); //得到10
    

      

    相反

    function doAdd(num1, num2){
      arguments[0] = 10;
     alert(num1 + num2);
    }
    doAdd(5, 5);//得到15
    

      

    另外需要注意的是,在严格模式下,上面的做法是错误的,不能在函数内部重写arguments的值,会报错。
    所有的参数传递都是通过传值,而不是引用,可以参见这篇文章,js函数参数传值与引用

  • 相关阅读:
    cpu时钟周期
    调参学习
    力扣:堆
    学习率衰减问题
    力扣:图之并查集问题
    Java判断空字符串
    python读取文件通过正则过滤需要信息然后保存到新文件里
    python换行写入文件
    Robotium solo.goBack();不起作用,解决方案
    Android清除本地数据缓存代码
  • 原文地址:https://www.cnblogs.com/jhmydear/p/4600982.html
Copyright © 2020-2023  润新知