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