为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

叮当猫咪 2019-05-24 19:05:55
阮一峰老师的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()//123Thunk(obj.fn)()()//456(全局的a,肯定不对呀)
查看完整描述

2 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

functionf(m){returnm*2;}
f(x+5);
//等同于
varthunk=function(){returnx+5;};
functionf(thunk){returnthunk()*2;}上面代码中,函数f的参数x+5被一个函数替换了。凡是用到原参数的地方,对Thunk函数求值即可。这就是Thunk函数的定义,它是"传名调用"的一种实现策略,用来替换某个表达式。
                            
查看完整回答
反对 回复 2019-05-24
  • 2 回答
  • 0 关注
  • 448 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信