vargetSingle=function(fn){varresult=null;returnfunction(){returnresult||(result=fn.apply(this,arguments));//这行}}//使用varfoo=getSingle(function(){//do...})foo()这个单例的代码中。(result=fn.apply(this,arguments))改成result=fn()是不是也行?为什么一定要用apply修正一下this呢?感觉这里的this即使不修正,也是指向宿主window。麻烦大佬们帮忙指导下,谢谢。
2 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
没有上下文,没太明白这边在干嘛。但应该不是楼上回答说的那样,函数getSingle的返回值是一个非箭头函数,所以这个返回值中的this在调用时才会确定,而并不一定是window或某个对象,但如果这边不apply或call,直接fn()的话是必然会丢失this的指向的,即会指向默认的window。
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
这里的apply是为了将arguments“打散”传入fn,比如:functionfn(a,b){console.log(a,b);}fn.apply(this,[1,2]);上面运行结果打印12,apply将[1,2]“打散”成了两个实参。而且所给的this是指向内部的函数,不是window。
添加回答
举报
0/150
提交
取消