func.apply(this,arguments) 在此代码中为 _.once() 做了什么?

the*_*yst 5 javascript

下面的函数 underbar 函数被我的同行重写了,如下所示:

    var once = function(func) {
        var alreadyCalled = false;
        var result;

        return function() {
          if (!alreadyCalled) {
            result = func.apply(this, arguments);
            alreadyCalled = true;
          }
        return result
        };
      };
Run Code Online (Sandbox Code Playgroud)

我是这样解释的。它是一个接受另一个函数并返回另一个函数的函数。如果alreadyCalledfalse设置result = func.apply(this,arguments)

有人可以帮助我以简单的方式理解func.apply(this,arguments)这个函数的上下文中正在做什么吗?我似乎想不通!

Rah*_*kya 7

从中删除异步等待

React.useEffect(async () => { await something},[]);
Run Code Online (Sandbox Code Playgroud)

然后它的工作原理只是删除异步等待

React.useEffect(() => { something},[]);
Run Code Online (Sandbox Code Playgroud)

我知道您的代码不同,但我遇到了同样的问题,我从 useEffect 中使用的所有项目中删除了异步,并且我不再看到该错误


Die*_*res 5

每个函数都有两个隐式参数:thisarguments

applyFunction 对象上的方法允许您使用显式设置的参数来调用它。

所以这里会发生的是,你得到一个包装另一个函数的函数,当你调用它时,它会将参数传递给原始函数。它还会跟踪是否被调用及其结果。