JS中的函数传参

前言:

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

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中变量定义的时候,若是未给一个变量赋初值那么该变量的类型为undefiendjava

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

经过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!

  2

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

function say(name, message){

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

      arguments[1] = 'World!';

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

    }

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

//控制台打印:true;true;

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

function say(name, message){

      console.log(arguments.length);

    }

    say('World!');

//控制打印:1;

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

相关文章
相关标签/搜索