说来惭愧,之前没读过什么源码,今天尝试研究下async框架的源码,就从https://github.com/bsspirit/async_demo这个地方拉了一个async使用的demo来入手,好,一个一个js,一个一个函数来了解!
- apply.js
async.apply是给一个函数预绑定多个参数并生成一个可直接调用的新函数,demo中所给出的例子是
1 function inc(a,b,callback,timeout){ //先定义一个加法函数 2 var timeout = timeout || 200; 3 t.wait(200); 4 setTimeout(function() { 5 callback(null, a+b); 6 }, timeout); 7 } 8 var fn = async.apply(inc, 1, 2); //调用apply函数且赋予其部分参数 9 fn(function(err, n){ 10 log(‘1.2 inc: ‘ + n); 11 },500); //调用apply返回的函数并补齐所需参数,即相当于调用inc函数
由此找到async.js中的apply函数
1 async.apply = _restParam(function (fn, args) { 2 return _restParam(function (callArgs) { //返回一个函数并带有调用该函数时所需参数 3 return fn.apply( 4 null, args.concat(callArgs) //将调用所带参数与已有参数合并,接着传给自定义的函数(即之前的inc函数) 5 ); 6 }); 7 });
从以上内容可以看出,apply的实现原理就是返回一个带已有参数的函数,然后在调用该函数的时候再传入其余参数,最后去调用自定义的函数
时间: 2024-10-09 17:15:08