资讯专栏INFORMATION COLUMN

JavaScript中的函数与arguments

Baoyuan / 2684人阅读

摘要:为什么结果是,而不是对于函数来说,实参和形参是一一对应的,即,我们的代码只要求参数运算,那么结果自然是。为什么不会出错因为当我们不给函数传递这个参数的时候,这个参数为,这时候,为,因为转换为数值类型之后是。

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

原来我多传的参数在arguments中。
实参有多少个,只要调用 arguments.length即可,当前有4个

函数的形参个数能不能知道?
当然可以 , 形参个数就是 min.length

arguments看着像是个数组,不过,它可并不是一个数组哦,它是个object类型的,

怎么取到所有的参数,就不言而喻了

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。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/107152.html

相关文章

  • JavaScript arguments 对象全面介绍

    摘要:事实上,满足一定条件的对象都能被方法转换成数组。继承于的很大原因是不需要这四个方法。而在非严格模式下,两个会互相影响。数组与类数组对象数组具有一个基本特征索引。这是一般对象所没有的。是利用对象的键值对存取数据,而却是利用数组的索引。 1. 什么是 arguments MDN 上解释: arguments 是一个类数组对象。代表传给一个function的参数列表。 我们先用一个例子直观了...

    HackerShell 评论0 收藏0
  • JavaScript arguments 对象详解

    摘要:事实上,满足一定条件的对象都能被方法转换成数组。继承于的很大原因是不需要这四个方法。而在非严格模式下,两个会互相影响。数组与类数组对象数组具有一个基本特征索引。这是一般对象所没有的。是利用对象的键值对存取数据,而却是利用数组的索引。 1. 什么是 arguments MDN 上解释: arguments 是一个类数组对象。代表传给一个function的参数列表。 我们先用一个例子直观了...

    codergarden 评论0 收藏0
  • JavaScript中的执行上下文和变量对象

    摘要:以上简单总结了下对执行上下文和变量对象的理解,主要在于记录总结一下学习成果,目前文章的水平实在不敢谈分享。 执行上下文(Execution Context) 文章同步到github javaScript中的执行上下文和变量对象 JavaScript代码执行的过程,包括编译和执行两个阶段,编译就是通过词法分析,构建抽象抽象语法树,并编译成机器识别的指令,在JavaScript代码编译阶段...

    why_rookie 评论0 收藏0
  • JavaScript函数式编程(0):函数基础 arguments、this、apply()、cal

    摘要:参数引用函数的上下文,函数上下文来自于等面向对象语言,中的依赖于函数声明。没有重载函数没有签名,因为其参数是由包含零或多个值的数组来表示的。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。 1 函数参数 函数的实参和形参个数可以不等,之所以会这样,原因是 ECMAScript 中的参数在内部是用一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪...

    陈伟 评论0 收藏0
  • JavaScript函数式编程(0):函数基础 arguments、this、apply()、cal

    摘要:参数引用函数的上下文,函数上下文来自于等面向对象语言,中的依赖于函数声明。没有重载函数没有签名,因为其参数是由包含零或多个值的数组来表示的。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。 1 函数参数 函数的实参和形参个数可以不等,之所以会这样,原因是 ECMAScript 中的参数在内部是用一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪...

    liuchengxu 评论0 收藏0

发表评论

0条评论

Baoyuan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<