博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript中的函数与arguments
阅读量:6295 次
发布时间:2019-06-22

本文共 1837 字,大约阅读时间需要 6 分钟。

js中怎么定义一个函数?

// 定义一个函数,求出参数中的最小值 function min(a,b,c,d...) {  //函数的代码}

上面的函数怎么调用?

min(1,2,3,4,5,6,7...);

定义一个求两个数中最小值的函数

function min(a, b) {  return a>b? b:a;}调用min(1,2);
  • 1 函数的形参是什么?
    函数的形参是定义该函数时,你设置的函数参数个数
  • 2 min函数的形参有几个?
    2个,a和b
  • 3 min函数的实参有几个?
    调用函数时传递几个就是有几个,上面调用时,我们传递了 1和2 ,那么实参个数就是两个

问?既然实参传递几个就是有几个,调用函数时,我传递的实参个数能不能大于形参个数?

function min(a, b) {  return a>b? b:a;}var result=min(1,2,-1,4)console.log(result) //输出 1

以上代码说明,我们可以传递的参数大于形参个数,且不会出错。

  • 为什么结果是1,而不是-1?
    对于函数来说,实参和形参是一一对应的,即a=1,b=2,我们的代码只要求a,b参数运算,那么结果自然是1。

问题来了,我们传递了4个参数,a,b用了,那么-1,4 这两个参数去哪了,我能不能拿到?

答案是,我们的另外两个参数被放在了函数的arguments中,我们来看看arguments是个什么

function min(a,b) {  console.log(arguments);  return a>b? b:a;}var result=min(2,6,90,10)console.log(result) //输出 2

image.png

  • 原来我多传的参数在arguments中。
    实参有多少个,只要调用 arguments.length即可,当前有4个
  • 函数的形参个数能不能知道?
    当然可以 , 形参个数就是 min.length
  • arguments看着像是个数组,不过,它可并不是一个数组哦,它是个object类型的,

image.png

  • 怎么取到所有的参数,就不言而喻了
for(var i in arguments){    console.log(arguments[i]) }
  • 说了这么半天,这玩意儿有啥用处?
//两个数字中的最小值function min(a,b){  return Math.min(a,b);}min(1,2);//四个数字中的最小值function min(a, b, c, d){  return Math.min(a,b,c,d);}min(1, 2,3,4);//6个数字中的最小值function min(a, b, c, d,e,f){  return Math.min(a, b, c, d,e, f);}min(1, 2,3,4,5,6);//n个数字中的最小值function min(a, b, c, d,e,f,...n){  return Math.min(a, b, c, d,e, f,...n);}min(1, 2,3,4,5,6,...n);//随着我们要比较的数字的增多,我的函数形参数目也越来越多,//有了arguments这个对象,形参数目不就可以不写了么,像这样function min(){  var res=arguments[0]  for(var i in arguments){    if(i==0) continue;    res=res>arguments[i]?arguments[i]:res;  }  return res;}min(1, 2,3,4);//代码更精简点,还可以这样function min(){  return Math.min.apply(this,arguments);}min(1, 2,3,4,-1,2,0-3);//-3

那么我们可以少传么?

function min(a, b) {  return a>b? b:a;}var result=min(1)console.log(result) //输出 1

以上代码说明,我们可以传递的参数小于形参个数,且不会出错。

为什么不会出错?因为当我们不给min函数传递 b 这个参数的时候,b这个参数为 undefined,这时候,a>undefined 为false,因为b转换为数值类型之后是 NaN。

转载地址:http://yvvta.baihongyu.com/

你可能感兴趣的文章
优化Hadoop Balancer运行速度
查看>>
分析型数据库受大数据市场追捧
查看>>
深度学习训练,选择P100就对了
查看>>
ElasticSearch小操之Marvel,Sense
查看>>
[译] Redux 有多棒?
查看>>
Powershell 邮件发送
查看>>
创建代码生成器可以很简单:如何通过T4模板生成代码?[下篇]
查看>>
大数据时代分析师 Splunk助大数据落地
查看>>
【前沿】何恺明大神ICCV2017最佳论文Mask R-CNN的Keras/TensorFlow/Pytorch 代码实现
查看>>
云计算中心的实施技术
查看>>
iOS中 支付宝钱包详解/第三方支付 韩俊强的博客
查看>>
赛可达推病毒攻击检测和情报分享服务
查看>>
《社交网站界面设计(原书第2版)》——2.10 自我反省式的出错信息
查看>>
【vue】webpack打包vue项目并且运行在Tomcat里面
查看>>
颠覆传统下载体验 QNAP迅雷系列NAS重磅登场
查看>>
物联网:从源头为生产环境安全把关
查看>>
英巴卡迪诺新年战略:支持Linux提供中文手册
查看>>
梭子鱼任命James Forbes-May为亚太区销售副总裁
查看>>
关于“大数据”的15条干货思考
查看>>
Wind River Helix系统及物联网解决方案 简化企业IOT部署
查看>>