关于javascript:使用apply()与call(),在本例中使用哪一个?

Using apply() vs call(), which one to use in this case?

本问题已经有最佳答案,请猛点这里访问。

查看传单API中的代码

我的问题是为什么wrapperFn.apply(context, args);fn.apply(context, args);使用apply()而不是call()。

你怎么知道该用哪一个?

很困惑,因为我不知道我的传递函数是否使用数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
limitExecByInterval: function (fn, time, context) {
        var lock, execOnUnlock;

        return function wrapperFn() {
            var args = arguments;

            if (lock) {
                execOnUnlock = true;
                return;
            }

            lock = true;

            setTimeout(function () {
                lock = false;

                if (execOnUnlock) {
                    wrapperFn.apply(context, args);
                    execOnUnlock = false;
                }
            }, time);

            fn.apply(context, args);
        };
    },


Apply接受一个参数数组,这对于方法链接很有用,相当于调用super的javascript。在Java等方面。

1
2
3
function makeNoise() {
   Foo.prototype.makeNoise.apply(this, arguments);
}

调用接受参数列表,在其他情况下,参数仅作为单个变量可用,这更有用。

1
fn.call(this, x, y, z);

这只是一个简写

1
fn.apply(this, [x, y, z])

如果您有一个参数数组,则需要使用apply()。