【JS】函数实参加形参
微信订阅号:Rabbit_svip
本节目录
- 形参
- 实参
- arguments的特性
- arguments的非标准用法
- arguments小案例
1.形参
function test(x, y) { // todo...}上面的代码中,x和y就是形参。形参就是在函数定义时,公告的变量。
在JS中,函数定义并未指定函数形参的类型,甚至不检查形参的个数。
形参数量
function test(x, y) { console.log(test.length);}test(); // 输出2通过 length 属性,可以输出形参的数量。
2.实参
function test(x, y) { // todo...}test(1, 2);上面代码,第5行里的 1 和 2 就是函数的实参。
在JS中,函数定义并未指定函数形参的类型,函数调用也未对传入的实参值做任何类型检查,甚至实参的数量也没做太大限制。
因而会出现形参加实参数量不相等的情况。
在调用函数时,传入的实参比函数公告时定义的形参数量要少的时候,剩下的形参的值都为 undefined 。(实参比形参少,多出来的形参值都为undefined)。
3.arguments的特性。
当调用函数的时候,传入的实参数量大于函数定义时的形参数量,这种情况下是没办法直接取得未命名值的引用(实参比形参多)。
遇到上面所说的情况,可以用 arguments 这个标识符来处理。
let test = function (x, y) { console.log(arguments);}test(1, 2, 3, 4); // 输出Arguments(4) [1, 2, 3, 4, callee: ?, Symbol(Symbol.iterator): ?]上面代码中,在函数体内用 arguments ,可以把传进来的实参都放在一个伪数组中。通过下标可以调用所有实参。
值得注意的是:arguments是伪数组。除了 length 属性外,数组的其余属性,arguments几乎是没有的!
arguments包含一个length属性,这个属性用来标识其所包含元素的个数。
最后还需要注意一点:ES6中箭头函数里是无法使用arguments的!!!
4.arguments的非标准用法
arguments除了定义了伪数组元素外,还定义了 callee 和 caller 属性。在ES5严格模式中,对着两个属性的读写操作都会产生一个类型错误。而在非严格模式下,ECMAScript标准规范定义callee属性指代当前正在执行的函数。caller是非标准的,但大多数浏览器都实现了这个属性,它指代调用当前正在执行的函数的函数。通过caller属性可以访问调用栈。
callee最常出现的地方是函数递归,就是函数自身调用自己。
var factorial = function(x) { if(x <= 1) return 1; return x * arguments.callee(x-1);};5.arguments小案例
求最大值。
function max() { var max = Number.NEGATIVE_INFINITY; for (var i = 0; i < arguments.length; i++) { if(arguments[i] > max) { max = arguments[i]; } } return max;}console.log(max(1, 40, 1, 20, 6, 5)); // 输出 401. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 【JS】函数实参加形参