猿问

this不对,怎么改写?-------阮老师的ES6

阮一峰老师的ES6文章里关于把多参函数改写为Thunk函数的说明任何函数,只要参数有回调函数,就能写成Thunk函数的形式。下面是一个简单的Thunk函数转换器。
//正常版本的readFile(多参数版本)
fs.readFile(fileName,callback);
//Thunk函数转换器。
//ES5版本
varThunk=function(fn){
returnfunction(){
varargs=Array.prototype.slice.call(arguments);
returnfunction(callback){
args.push(callback);
returnfn.apply(this,args);
}
};
};
//ES6版本
constThunk=function(fn){
returnfunction(...args){
returnfunction(callback){
returnfn.call(this,...args,callback);
}
};
};
//使用上面的转换器,生成fs.readFile的Thunk函数。
varreadFileThunk=Thunk(fs.readFile);
readFileThunk(fileA)(callback);
Thunk函数里面的this有问题吧?正常版本里的this是fs,Thunk里面的this是window。
我的分析对吗??如果对,那么怎么修正该Thunk函数呢?
//我的测试用例
vara=456;
varobj={
a:123,
fn:function(b,c){
console.log(this.a)
}
}
obj.fn()//123
Thunk(obj.fn)()()//456(全局的a,肯定不对呀)
叮当猫咪
浏览 449回答 2
2回答

猛跑小猪

functionf(m){returnm*2;}f(x+5);//等同于varthunk=function(){returnx+5;};functionf(thunk){returnthunk()*2;}上面代码中,函数f的参数x+5被一个函数替换了。凡是用到原参数的地方,对Thunk函数求值即可。这就是Thunk函数的定义,它是"传名调用"的一种实现策略,用来替换某个表达式。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答