函数(参数、重载)

  函数会在执行完return语句之后停止并立即退出,因此,位于return语句之后的任何代码都不会执行。

严格模式对函数的限制

  • 不能把函数、参数命名为eval或arguments。
  • 不能出现两个命名参数同名的情况

参数理解

ECMAScript中的参数在内部是用一个数组来表示的。函数接收到的始终是这个数组,而不关心数组中包含多少个参数,即使没有参数也可以,也不在乎传进来的参数是什么数据类型。例如:定义的函数只接收两个参数,在调用这个函数时未必一定传递两个参数。

arguments对象只是与数组类似(它并不是Array的实例),函数可以通过arguments对象来访问参数数组,从而获取传递给函数的每一个参数,即第一个参数是arguments[0],第二个参数是arguments[1],以此类推。使用length属性来确定传递进来多少个参数。如下:

//函数
function sayHi(name,msg){
    console.log('hello! '+name+','+msg);
}

//同样的使用arguments也可以实现
function sayHi(){
 console.log('hello! '+arguments[0]+','+arguments[1]);
}

//调用时候,可以返回同样的结果
sayHi('tom','how old are you today?'); //hello!tom,how old are you today?

arguments的值永远与对应命名参数的值保持同步。如下:

function doAdd(num1, num2) {
    arguments[1] = 10;    //将arguments[1]重写为10,因为arguments的值会自动反映到对应的命名参数,
所以num2也被修改为10。但是它们的内存空间是独立的,但它们的值会同步。

//如果只传入了一个参数,那么arguments[1]设置的值不会反映到命名参数中。因为arguments对象的长度是由传入的参数
个数决定的,不是由定义函数时的命名参数的个数决定的。
alert(arguments[0] + num2); } doAdd(10, 20); //20 doAdd(30, 20); //40

没有传递值得命名参数将自动被赋予undefined值,就跟定义了变量但没有初始化是一样的。

function add(a,b){
  return b;
}
add(1);//undefined
add(1,2)//2

关于重载

ECMAScript没有函数签名【接收参数的类型和个数没影响】,所以函数重载没办法实现。

利用arguments可以实现函数的重载效果,如下:

//根据传递参数的个数来执行不同的逻辑
function doAdd(){
   if(arguments.length==1){
        console.log(arguments[0]+10);
    }else if(arguments.length==2){
         console.log(arguments[0]+arguments[1]);
    }
}

//调用
doAdd(10);    //20(执行if)
doAdd(10,30);   //40(执行elseif)

ECMAScript中没有函数重载,so如果存在两个同名的函数,则该名字只属于后定义的函数【即后定义的函数才有效】。

        function addSomeNumber(num){
            return num + 100;
        }
        
        function addSomeNumber(num) {
            return num + 200;
        }
        
        var result = addSomeNumber(100);    
        alert(result);   //300 

js函数重载

转载于:https://www.cnblogs.com/lmjZone/p/7874070.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值