求大佬指点哈!JavaScript中的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。
麻烦大佬们帮忙指导下,谢谢。
慕森卡
浏览 264回答 2
2回答

慕容708150

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

哔哔one

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

相关分类

JavaScript