js--函数参数(你可能不知道的参数传递)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js--函数参数(你可能不知道的参数传递)相关的知识,希望对你有一定的参考价值。

前言:

函数分为有参有返回值,有参无返回值,无参无返回值,无参有返回值;那么对于无参数的函数你想使用函数的调用怎么办呢?如果你想封装一个代码,实现多种功能,但是形参大于实参或者实参大于形参又该如何?本文就发生函数调用过程中,值传递,参数的不对等处理原则等关于参数的一些相关操作进行阐述。

1.实参数大于形参数:

 

技术分享图片
 function say(name,message){

    console.log(‘Hello‘ + name + message);

  }

  say(‘World!‘,‘ByeBye!‘,‘World’);

//控制台打印出:HelloWorld!ByeBye!
技术分享图片

 

2.实参数小于形参数:

 

技术分享图片
function say(name,message){

    console.log(‘Hello‘ + name + message);

  }

  say(‘World!’);

//控制台打印出:HelloWorld!undefined
技术分享图片

 

在JS中变量定义的时候,如果未给一个变量赋初值那么该变量的类型为undefiend

细心的可以发现一个规律,就是在进行函数调用的时候,不管实参的数目大于形参还是小于形参被调用的函数都会执行;在JS中函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型。发生函数调用的时候可以给一个实参也可以给多个实参,之所以会这样,是因为在js中的参数在内部是用一个数组来表示。函数接收到的始终是这个数组,而不关心数组中包含哪些参数,如果这个数组不包含任何参数也无所谓,包含多个参数也没问题,在函数体内可以通过arguments(参数)对象来访问这个参数数组,从而获取传递给参数的每个参数。 arguments对象和数组对象相类似,可以通过下标来获取传入的每一个元素(第一个元素是arguments[0]);也可以使用length属性来确定传递进来多少个参数。

3.通过arguments 来实现函数参数的“调用”:

对于上面的代码可以这样写:

技术分享图片
  function say(name, message){

      console.log(‘Hello‘ + arguments[0] + arguments[1]);

      console.log(arguments.length);

    }
say(‘World!‘, ‘ByeBye!’);
技术分享图片

或者

技术分享图片
function say(){

    console.log(‘Hello‘ + arguments[0] + arguments[1]);

    console.log(arguments.length);

  }

  say(‘World!‘, ‘ByeBye!’);
技术分享图片

控制台打印效果都是一样的;即:HelloWorld!ByeBye!

即:在这里你可以这样理解;当发生函数调用的时候,实参被保存在叫做arguments的“数组”当中;而arguments中对应下标的值在发生函数调用的时候始终与被调用函数的参数保持;

对于这个可采用如下方法验证:

技术分享图片
function say(name, message){

      console.log(arguments[1] == message);

      arguments[1] = ‘World!‘;

      console.log(arguments[1] == message);

    }

    say(‘World!‘, ‘ByeBye!’);

//控制台打印:true;true;
技术分享图片

不过并不是说读取这两个值会访问相同的内存空间,他们的内存空间是独立的,但他们的值会同步,这种同步是单向的,也就是参数的改变不会改变argumens中对应的值。

技术分享图片
function say(name, message){

      console.log(arguments.length);

    }

    say(‘World!‘);

//控制打印:1;
技术分享图片

arguments对象的长度是由传入的参数个数决定,不由定义函数的参数的个数决定。










以上是关于js--函数参数(你可能不知道的参数传递)的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server--你可能不知道的技术细节:存储过程参数传递的影响

js 方法穿参数(只传参数,不执行它的提交操作)

thinkphp js参数传递问题

php函数中,多个参数的情况下怎么使其中一个参数为默认值而其他的使用指定值

spring MVC 怎么获取前端传递的数组参数

JS怎么样调用IOS并且传递参数?