Javascript进阶---函数参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript进阶---函数参数相关的知识,希望对你有一定的参考价值。
arguments对象
在javascript中,谈到函数参数,就不得不说一说那个熟悉又陌生的argunemts
- arguments对象用于承载调用函数时候传入的参数
- arguments不是一个数组,但是十分类似一个Array,有length属性,也可以用下标去访问
-
arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。如下代码可以得以验证。
function f(a, b, c) { console.log(arguments.length); // result: "2" a = 100; console.log(arguments[0]); // result: "100" arguments[0] = ‘qqyumidi‘; console.log(a); // result: "qqyumidi" console.log(c); // result: "undefined" c = 2012; console.log(arguments[2]); // result: "undefined" } f(1, 2); //实际上只传了两个参数
此处证明,函数内部的形参一开始为空的时候,则内部形参的值与arguments对应位置的值就不会同步了
(本引用参考自http://www.cnblogs.com/lwbqqyumidi/archive/2012/12/03/2799833.html)
- 在Javascript中,函数名相同,传参数目/类型不同,不会被视为两个函数。也不会像JAVA一样进行函数的重载,利用arguments对象则可以在Javascript中模拟出重载的效果。
function fun() { if (arguments.length == 0) { // do sth; } if (arguments.length == 1) { if (typeof (arguments[0]) == ‘function‘) { // do sth for function } } if (arguments.length == 2) { // do sth; } }
- 在Javascript中传参的个数并不会影响函数被调用
function fun(){ return arguments[0] + arguments[1]; } fun(3,5); // 8 fun(3); // NaN fun(); //NaN
例子中的aruguments[0]和aruguments[1],若未传入,则值为NaN
- arguments对象中有一个实用的属性:callee
function count(a){ console.log(arguments.callee); } count(10);// count(a)
返回这个函数本身
传入过量参数
- 当调用某个函数时,传入了过多的参数怎么办?
- 在函数声明的时候使用“...rest”的方式来表示剩余的参数(rest为任意合法名称,为一个数组)
function fun(a, b, ...restArray) { console.log(‘我们接收了:‘ + a + ‘与‘ + b); var count=2; for (var x of restArray){ count++; console.log("第"+count+"个是:"+x); } } fun(1, 8, 9, 5,8,9,6,4,8,7,8,9); /* 我们接收了:1与8 第3个是:9 第4个是:5 第5个是:8 第6个是:9 第7个是:6 第8个是:4 第9个是:8 第10个是:7 第11个是:8 第12个是:9 */
Javascript将会把多余的参数使用一个自定义名称的数组将其存放起来
传入的参数不够
当调用某个函数的时候,传入的参数不够(传入的参数比接收的少),javascript就会以undefined去代替缺少的参数。这样一来,就有可能影响原函数内部的操作,现ES 6推行允许给参数福默认值,在传参缺少时,直接使用默认值。
function fun(a = "我是A", b = "我是B", c){ console.log(a + " " + b + " " + c); } fun("我是A的表姐");//我是A的表姐 我是B undefined
以上是关于Javascript进阶---函数参数的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情
JavaScript 函数进阶函数(匿名回调递归函数)及相关练习