🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
我们定义两个函数,第一个是multiplyByTwo(),该函数通过一个循环将其所接收的三个参数分别乘以2,并以数组的形式返回结果;第二个是addOne()只接受一个值,然后将它加1并返回。 ``` function multiplyByTwo(a,b,c){ var i,ar = []; for(i = 0;i < 3;i++){ ar[i] = arguments[i] * 2; } return ar; } function addOne(a){ return a + 1; } undefined multiplyByTwo(1,2,3); [2, 4, 6] addOne(100); 101 ``` 然后,我们有三个参数,我们要实现这三个参数在两个函数之间的传递。我们需要定义另一个数组,用于存储来自第一步的结果。我们从multiplyByTwo()调用开始。 ``` function multiplyByTwo(a,b,c){ var i,ar = []; for(i = 0;i < 3;i++){ ar[i] = arguments[i] * 2; } return ar; } function addOne(a){ return a + 1; } var myarr = []; myarr = multiplyByTwo(10,20,30); for(var i = 0;i < 3;i++){ myarr[i] = addOne(myarr[i]); } myarr; ``` 返回结果: ``` [21, 41, 61] ``` 上面的代码使用了两个循环,如果数据量很大或循环操作很复杂的话,开销一定不小,所以我们还可以进一步优化,将他们二合一。这就需要对multiplyByTwo()函数做一些改动,使其接受一个回调函数,在每次迭代操作中调用它。 ``` function multiplyByTwo(a,b,c,callback){ var i,ar = []; for(i = 0;i < 3;i++){ ar[i] = callback(arguments[i] * 2); } return ar; } function addOne(a){ return a + 1; } myarr = multiplyByTwo(1,2,3,addOne); ``` 返回结果: ``` [3, 5, 7] ``` 还可以用匿名函数代替addOne(),这样做可以节省一个全局变量。 ``` function multiplyByTwo(a,b,c,callback){ var i,ar = []; for(i = 0;i < 3;i++){ ar[i] = callback(arguments[i] * 2); } return ar; } multiplyByTwo(1,2,3,function(a){ return a + 1; }); ``` 返回结果: ``` [3, 5, 7] ``` 而且匿名函数还易于随时根据需求调整代码