javascript函数参数总结

前言

  javascript中,函数不介意传递进来多少参数,也不在乎传进来的参数什么数据类型,甚至不传参数。

  javascript中的函数定义未指定函数形参的类型,函数调用也不会对传入的实参值做任何类型检查。

同名形参

  非严格模式下,函数中可以出现同名形参,只能访问最后出现的该名称的形参。在严格模式下,抛出语法错误。

  

1 function add(x,x,x){
2   return x;          
3 }
4 console.log(add(1,2,3));     //3

 

参数个数

  实参数大于形参数:

1 function say(name,message){  
2      console.log("hello"+name+message);        
3 }
4 say("world","!","byebye");         //helloworld!

  实参数小于形参数:

1 function say(name,message){
2   console.log("hello"+name+message);  
3 }
4 say("world!");           //helloworld!undefined

  注意:在js中变量定义的时候,如果未给一个变量赋初值那么该变量的类型为undefined。在函数调用时,无论参数个数如何变化函数都会执行,所有在js中函数不介意传递进来多少参数,也不在乎传递进来的参数是什么数据类型。发生函数调用时可以给一个实参也可以给多个实参,因为在js中的参数在内部用一个数组来表示。函数接收到的始终是这个数组,不关心参数个数,在函数内可以通过arguments对象来访问这个参数数组,获取传递给参数的每个参数。arguments对象和数组对象类似,可以通过下标来获取传入的每一个元素;也可以使用length属性来确定传递进来多少个参数。

arguments对象并不是Array的实例,它是一个类数组对象,可使用方括号语法访问它的每个元素

1 function say(name){
2     console.log(arguments[0],arguments[1])
3 }
4 say("hello","world");       //hello world

arguments对象的length属性显示实参的个数,函数的length属性显示形参的个数

1 function say(name){
2   console.log(arguments.length);    
3 }
4 say("hello","world");           //2
5 console.log(say.length);      //1

形参只是提示便利,但不是必需的

1 function say(){
2   return arguments[0]+arguments[1];  
3 }
4 console.log(say("hello","world!"))    //helloworld!

对象参数

 1 function arraycopy(from,form_start,to,to_start,length){ } 

  通过名/值对的形式传入参数,这样参数的顺序无关紧要了。定义函数的时候,传入的实参都写入一个单独的对象中,调用时传入一个对象,对象中的名/值对是真正需要的实参数据

1 function easycopy(args){
2  arraycopy(args.from,args.form_start||0,args.to,args.to_start||0,args.length)  ;
3 }
4 var a = [1,2,3,4],b=[];
5 easycopy({form:a,to:b,length:4}); 

同步

  当形参与实参的个数相同时,arguments对象的值和对应形参的值保持同步

1 function test(num1,num2){
2   console.log(num1,arguments[0]);       //1 1
3   arguments[0] = 2;
4   console.log(num1,arguments[0]);        //2 2
5   num1 = 10;
6   console.log(num1,arguments[0]);        //10 10       
7 }
8 test(1);

  注:虽然命名参数和对应arguments对象的值相同,但并不是相同的命名空间。它们的命名空间是独立的,但值是同步的

  严格模式下,arguments对象的值和形参的值是独立的

1 function test(num1,num2){
2   "use strict";
3   console.log(num1,arguments[0]);          //1 1
4   arguments[0] = 2;                                
5   console.log(num1,arguments[0]);           //1 2
6   num1 = 10;
7   console.log(num1,arguments[0]);           //10 2    
8 }
9 test(1)

  当形参并没有对应的实参时,arguments对象的值与形参的值并不对应

1 function test(num1,num2){
2    console.log(num1,arguments[0]);      //undefined,undefined
3    num1 = 10;
4    arguments[0] = 5;
5    console.log(num1,arguments[0]);       //10 5    
6 }
7 test()

 

  

 

  

  

 

posted @ 2018-03-23 16:03  激战JZ  阅读(1217)  评论(0编辑  收藏  举报