JavaScript中的apply在这里到底修正了什么

发布于 2022-09-11 19:33:48 字数 441 浏览 31 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

锦爱 2022-09-18 19:33:48

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

祁梦 2022-09-18 19:33:48

这里的apply是为了将arguments“打散”传入fn,比如:

function fn(a, b) {
    console.log(a, b);
}
fn.apply(this, [1,2]);

上面运行结果打印1 2,apply将[1, 2]“打散”成了两个实参。

而且所给的this是指向内部的函数,不是window。

潦草背影 2022-09-18 19:33:48

你这种情况下apply是没啥用的 fn的指向永远是getSingle的上下文

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文