标签:
arguments对象
在JavaScript中,谈到函数参数,就不得不说一说那个熟悉又陌生的argunemts
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)
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; } }
function fun(){ return arguments[0] + arguments[1]; } fun(3,5); // 8 fun(3); // NaN fun(); //NaN
例子中的aruguments[0]和aruguments[1],若未传入,则值为NaN
function count(a){ console.log(arguments.callee); } count(10);// count(a)
返回这个函数本身
传入过量参数
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
标签:
原文地址:http://www.cnblogs.com/HXW-from-DJTU/p/5936683.html