不定参数
很多时候,比如我们要写一个求和的函数,那么如果说知道,参数的情况下,可以这么写。
1 2 3 4 5 6
| function sum(a , b) { let rs = a + b; console.log(rs) }
|
可是,如果不知道呢?比如参数是不确定的,怎么办呢?
这里就要用到 JavaScript的 arguments 对象。
1 2 3 4 5 6 7 8 9 10 11 12
| function sum() { for(let sum = 0, i = 0; i < argumens.length; i+=1) { sum += argumens[i]; }
console.log(sum); }
sum(1); sum(1,2,3);
|
argumens 是一个长得像数组的对象,它是函数调用时的实参列表。当然现在 ES6 有更简单的做法。
1 2 3 4 5 6 7 8 9
|
function foo( ...rest) {
console.log(rest); }
foo(1, 2, 3, 4, 5);
|
上面的方式 是 ES6 新增加的。使用这个方法,可以直接获得实参列表,并以数组方式返回。
collee属性
我们计算0到一百的和,可以用递归的方法。
1 2 3 4 5 6 7 8 9 10 11
| function sum(n) { if (n) { return n + sum(n-1) } else { return 1; } }
console.log( sum(100) );
|
但是假如现在我们的需求是写一个即时函数呢?这个函数没有名字。
1 2 3 4 5 6 7
| (function(n) { if (n) { return n + argumens.collee(n-1); } else { return 1 }}());
|