1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- //! 函数扩展: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);
|