day-8.2 函数的参数(形参、实参、不定参)
函数的参数分为形参,实参,不定参
形参:形式参数、就是定义函数的时候,定义函数括号里的参数(变量名),相当于在函数这个作用域里面定义了一个变量
实参:实际参数、就是函数执行的时候,执行函数的括号里的实际参数(数据),这就叫做实参
举例:
1 <script> 2 var a = function (a , b ){ //定义函数的时候定义了2个形参; 形参定义的参数a和函数外部的变量a没有关系。类似于在函数内var a ,和 var b,跟定义变量不同的是,参数可以在执行的时候作为传参的模板。 3 alert(a+b); 4 }; 5 a(3,4); //这里传入的为实参,输出7
6 a("3",4); //输出34
7 </script>
函数调用执行,传参的时候,可以引用变量
比如
1 var a = function(a,b){ 2 alert(a+b); 3 }; 4 var b = 4; 5 a(3,b); //输出7;这里的b是引用了变量b的值,还是数据,而不是变量。
实参还可以是函数、数组、json等任何数据类型
1 <body> 2 <script> 3 var a = function (a , b ){ 4 if (a) 5 { 6 b(5); //执行传入的函数(实参),执行的同时再传入实参5;最终弹出5; //多出使用a变量,但是不冲突,这是因为函数隔离开作用域,后面会讲。 7 } 8 }; 9 a(true,function (a){ 10 alert(a); 11 }); 12 </script> 13 </body>
需要注意一点,参数传过来的时候,不做任何操作的时候,会保留参数的原有数据类型。
如果已经做了操作,会根据操作的结果转变数据类型。
1 var a = function (a,b){ 2 alert(typeof b ); //function 3 alert(typeof (a+b) ); //string 4 } 5 a(1,function (){ 6 alert(1); 7 });
形参和实参不一一对应的情况(实参多于形参,和实参少于形参);
1 var a = function (a,b){ 2 alert(a+b); 3 } 4 a("123"); //实参少于形参,输出 123undefined,b相当于一个定义却未赋值的变量。 5 a(1,2,3,4); //实参多于形参,输出3,多了的实参未调用则忽略。
不定参:每个函数都有个默认伪数组的属性,用来存储函数执行时传过来的参数。不定参就是函数执行时传过来的参数不确定时,可以通过argument属性去调用参数。
https://www.cnblogs.com/hanhanhan/p/5765920.html //arguments存在哪?
1 <script> 2 function sum(){ 3 console.log(arguments); 4 var s = 0 ; 5 for (var i = 0,j=arguments.length;i < j;i++){ //函数sum未设定参数,执行的时候传入的实参为不定参,通过arguments属性读取参数;通过for循环,遍历数组arguments下标读取值相加;
读下标一般将下标赋值给一个变量,再读取变量,避免反复读取属性的.length; j=arguments.length,可以紧跟着var i 后面去定义。 6 s+=arguments[i]; 7 } 8 alert(s); //输出21; 9 } 10 sum(1,2,3,4,5,6); 11 </script>
浙公网安备 33010602011771号