$(document).ready(function(){ var arr = [1,14,10,8,2,5]; function getTask(callback,cond){ if(0< cond) { callback(arr); } } var CALLME = { func3 : function(callback){ getTask(callback,3); }, func2 : function(callback){ CALLME.func3(function(tasks){ callback(tasks.sort(function(taskA,taskB){ return taskA - taskB; })); }); }, func1 : function(callback){ CALLME.func2(function(task){ callback(task[0]?"first task":null); }); } }; CALLME.func1(function(task){ console.log(task); });});
代码有些乱,后续整理:
事实上这是一个多层过滤系统,最开始的数组在
func3中被条件限制,callback被传入值,即被3限制,传入数组
func2中数组被按数值大小排续
func1中限制了如果有下标为0的数组值,那么就task为"fisrt task"
最终CALLME.fun1的参数做为函数被执行,打印出first task;
这也给了我们有时解读程序的思路:从答案反推问题,有时我们需要从答案入手,找寻逻辑与思路,从而去理解程序。
而且,这种分层过滤的回调写法更大的好处是你可以直接调用它的任意一层,比如说我只是想给arr排序,那么我只需要
CALLME.func2(function(task){ console.log(task); });