JavaScript函数遇实参与形参——智能而有原则

1.实参与形参个数可以有偏差,不会因为参数不统一而错误。

例1:

functionbox(a,b){
    return a + b;
 }

 alert(box(1,3,5));        //运行结果:“4”。
                           //进行的运算为“1+3”,没有用到“5”。

例2:

functionbox(a,b,c){
    return a + b+c;
 }
 alert(box(1,'5'));         //运行结果:15undefined。
                            //结果为sring类型。进行的运算1与‘5’的字符连接,再与一个不存在(undefined)的字符连接,结果即为15undefined。

2.JS函数不能重载。

因为“函数重载”靠的就是相同函数名根据参数的不同,匹配特定函数,从而执行函数的过程;而JS函数不再排斥“异形”函数,缺失了辨别相同函数名的不同函数的过程,相同函数名的情况下,JS调用时,只会执行最后一个所调函数。

例3:

function box(a,b,c){
    alert('执行了第一个函数,' + a +'+' + c + '='+(a+c));
 } 

function box(a,b,c){
    alert('执行了第二个函数,'+ a + '+' + b + '='+(a+b));
 }                

alert(box(1,'5',3));    //执行结果为:执行了第二个函数,1+5=15
                        //类型为string.               

例4:

function box(a,b,c){
    alert('执行了第二个函数,'+ a + '+' + b + '='+(a+b));
 } 

function box(a,b,c){
    alert('执行了第一个函数,' + a +'+' + c + '='+ (a+c));
 }               

alert(box(1,'5',3));    //执行结果为:执行了第一个函数,1+3=4
                        //类型为number.

3.函数运用arguments对象,很有特点

arguments对象的使用,很好地解释了支持形参、实参不一致而不出错的原理性问题。

3.1 arguments[index]指定参数值,index为参数的索引

例5:

function box(){
    return arguments[0]+arguments[5];
}

alert(box(1,2,3,4,5,6));                       //执行结果为:7
alert(box('Test','UseCase',3,4,5,6));          //执行结果为:Test6
                                               //arguments[0]表示第一个参数,arguments[5]表示第六个参数;上面两个执行结果,都反映了,box()函数只用了所需的指定参数,其他参数都被忽略了。</span>

3.2 arguments.length得到参数的个数

例6:

function box(){
    return arguments.length;
}

alert(box(1,2,3,4,5,6));                      //执行结果为:6
alert(box('Test','UseCase',3,4,5,6));         //执行结果为:6
                                              //当需要知道某序列有多少元素时,将其传入该函数,即可知道</span>

3.3 arguments.length的扩展运用

例7:

function box(){
    var sum = 0;
    for (var i=0;i<arguments.length;i++){
       sum += arguments[i];
    }
    return sum;
}

alert(box(1,3,7,14));                         //运行结果:25
                                              //这样,box()函数就不用管参数到底有几个</span>

4.一个显而易见的错误(只为下面说明问题)

看了例7,可能会有点迷糊,因而添加例8、例9,都说明了一个问题,参数为函数体提供必要信息,用于可控地实现功能。函数(function:功能)

例8:

function box(a,b){
    return a+b+c;
}

alert(box(1,2,3));                                       //ReferenceError:c is not defined
alert(box(1,2));                                         //ReferenceError:c is not defined
                                                         //字面量c未定义</span>

例9:

function box(){
    return a+b+c;
}                           

alert(box(1,2,3));                                       //ReferenceError:a is not defined
                                                         //字面量a未定义</span>

简单比较例2、例4、例8,可以得出这样的结论,JS中的函数体与形参、实参以及形参与实参的关系是:

遵循一个原则:函数实现功能

函数体与形参关系:形参必须满足函数体的必要需求,否则没法进行,即使用了形参未定义的‘字面量’,出错:c is not defined 。

形参与实参关系:实参在形参的标尺下,多出的被拦截而被忽略,缺少的被判断为undefined(不存在),但都不报错。

智能:是说JS函数对多出的实参去粗取精,对少的实参做了适当的处理,没有雷厉加之,使得函数运行更大限度地平稳协调。

时间: 2024-10-14 10:01:44

JavaScript函数遇实参与形参——智能而有原则的相关文章

php中函数的实参和形参

php中函数的实参和形参严格一一对应.例子: <?php function test($a,$b=2,$c){  //函数test第二个参数给默认值 $result=3*$a+2*$b+$c; return $result; } echo test(3,4,5);//调用正确,结果为22 echo test(3,,5);  //错误,没有给第二个形参传值,即使第二个形参有默认参数也不能绕过他而给第三个参数传值 echo test(3,4);//错误,没有给第三个参数传值 总结:函数中的形参带默认

《JS权威指南学习总结--8.3 函数的实参和形参》

内容要点: 一.可选形参      当调用函数的时候传入的实参比函数声明时指定的形参个数要少,剩下的形参都将设置为undefined值.     例如:       //将对象o中可枚举的属性名追加至数组       //如果省略a,则创建一个新数组并返回这个新数组.        function getPropertyNames(o,/*optional*/a){           if(a === undefined) a= [];           for(var property

函数的实参 函数的形参 闭包 js

函数的实参和形参# 可选形参```if(a === undefined) a = [];```等价于```a = a || [];```这两句是完全等价的,只不过后者需要提前声明a而已如果参数没有传入,其余的填充undefined可选的形式参数:通过注释/*optional*/来强调参数可选,并且要将其放在最后,否则就要使用null或者undefined来作为占位符来进行传入# 可变长的实参列表# callee和callercallee为指代当前正在执行的函数caller指代当前正在执行函数的函

JavaScript函数,作用域以及闭包

JavaScript函数,作用域以及闭包 1. 函数 (1). 函数定义:函数使用function关键字定义,它可以用在函数定义表达式或者函数声明定义. a. 函数的两种定义方式: * function functionName() {} * var functionName = function(){} b. 两种函数定义不同之处 1). 声明提前问题 函数声明语句   :声明与函数体一起提前 函数定义表达式 :声明提前,但是函数体不会提前 请看下面图示:绿色线上面实在js初始加载的时候,查看

第十篇--------javascript函数-参数

javascript函数的参数:形参,实参 //function 参数 //形参列表 function test(a,b,c,d){ //alert(test.length); //形参个数,4个 //函数的实际参数,内部就是用一个数组去接收函数的实际参数 //arguments 对象,可以访问函数的实际参数 //arguments 对象只能在函数的内部使用 alert(arguments.length); //2个 alert(arguments[0]); //10 alert(argumen

JavaScript权威设计--JavaScript函数(简要学习笔记十一)

1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScript构造函数调用的语法是允许省略实参列表和圆括号的. 如: var o=new Object(); //->等价于 var o=new Object; 第四种:使用call()与apply()间接调用(放在后面详细说明) 2.函数的实参与形参——可选形参 先看一个例子: function getA(

第八章:Javascript函数

函数是这样一段代码,它只定义一次,但可能被执行或调用任意次.你可能从诸如子例程(subroutine)或者过程(procedure)这些名字里对函数概念有所了解. javascript函数是参数化的:函数定义会包括一个形参(parmeter)标识符列表.这些参数在函数中像局部变量一样工作.函数会调用会给形参提供实参的值.函数使用它们实参的值计算返回值,成为该函数的调用表达式的值. 除了实参之外,么次调用还会拥有一个值——本地调用的上下文——这就是this关键字值 如果函数挂载在一个对象上,作为对

JavaScript函数参数与调用

函数调用: /*    1.    函数调用        */      var temp = distance(0,1,2,3);        /*    2.    方法调用        */      this.CName = "全局";      var o = {            CName:"o类",            m:function(){                  var self = this;             

调用函数时传递的实参个数arguments.length; ,函数定义时的形参个数sum.length

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>范例6-4</title>