//! 函数扩展:rest参数 也叫剩余参数 //TODO 功能:接收一些列数字参数,完成求和 // function sum() {} // sum(1); // sum(1, 2); // sum(1, 2, 3); // sum(1, 2, 3, 4); // ... //! ES5实现:由于sum函数调用的时候传入的实参个数不定,因此不能通过定义函数的形参就接收所有的参数 //! 解决方案:使用函数中arguments function sum() { console.log(arguments); // arguments是伪数组对象(类数组对象) var total = 0; // 总和 for (var i = 0; i < arguments.length; i++) { // 使用for循环去遍历出所有的实参,然后累加到total变量上 total += arguments[i]; } console.log(total); } // sum(1); // sum(1, 2); // sum(1, 2, 3); // sum(1, 2, 3, 4); //! ES6 推荐使用rest参数 代替 arguments //! rest参数 是真数组,那么就可以使用数组对象的所有方法 // function sum(...rest) { // // console.log(rest); // var total = 0; // rest.forEach(function (v) { // total += v; // }); // console.log(total); // } // sum(1); // sum(1, 2); // sum(1, 2, 3); // sum(1, 2, 3, 4); //TODO 功能: 以base为基础值,去累加其他传入的数字参数 function sum(base, ...rest) { console.log(rest); } sum(1, 1); // 2 [1] sum(10, 2); // 12 [2] sum(100, 2, 3); // [2, 3] sum(1000, 2, 3, 4); // [2, 3, 4] //! arguments比较危险,如果手动修改arguments里的数据 会直接影响到传入的实参 function test1(x) { arguments[0] = 10; console.log(x); // 1? or 10? } test1(1); function test2(x, ...rest) { rest[0] = 100; console.log(x); } test2(1);