JavaScript中的apply在这里到底修正了什么
var getSingle = function(fn) {
var result = null;
return function() {
return result || (result = fn.apply(this, arguments)); // 这行
}
}
// 使用
var foo = getSingle(function(){
// do...
})
foo()
这个单例的代码中。(result = fn.apply(this, arguments))
改成 result = fn()
是不是也行?为什么一定要用apply修正一下this呢?感觉这里的this即使不修正,也是指向宿主window。
麻烦大佬们帮忙指导下,谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
没有上下文,没太明白这边在干嘛。但应该不是楼上回答说的那样,函数
getSingle
的返回值是一个非箭头函数,所以这个返回值中的this
在调用时才会确定,而并不一定是window
或某个对象,但如果这边不apply
或call
,直接fn()
的话是必然会丢失this
的指向的,即会指向默认的window
。这里的apply是为了将arguments“打散”传入fn,比如:
上面运行结果打印
1 2
,apply将[1, 2]
“打散”成了两个实参。而且所给的
this
是指向内部的函数,不是window。你这种情况下apply是没啥用的 fn的指向永远是getSingle的上下文