猿问

在线等!关于JS中的apply函数的一些一问题?

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。麻烦大佬们帮忙指导下,谢谢。
慕码人2483693
浏览 249回答 2
2回答

繁花不似锦

没有上下文,没太明白这边在干嘛。但应该不是楼上回答说的那样,函数getSingle的返回值是一个非箭头函数,所以这个返回值中的this在调用时才会确定,而并不一定是window或某个对象,但如果这边不apply或call,直接fn()的话是必然会丢失this的指向的,即会指向默认的window。

摇曳的蔷薇

这里的apply是为了将arguments“打散”传入fn,比如:functionfn(a,b){console.log(a,b);}fn.apply(this,[1,2]);上面运行结果打印12,apply将[1,2]“打散”成了两个实参。而且所给的this是指向内部的函数,不是window。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答