使用apply()vs call(),在这种情况下使用哪一个?

air*_*net 12 javascript

看一下Leaflet api的代码

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

你怎么知道使用哪一个?

困惑,因为我不知道我的传递函数是否正在使用数组.

   
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);
        };
    },

Ada*_*dam 2

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

function makeNoise() {
   Foo.prototype.makeNoise.apply(this, arguments);
}
Run Code Online (Sandbox Code Playgroud)

调用采用参数列表,在参数仅作为单个变量使用的其他情况下更有用。

fn.call(this, x, y, z);
Run Code Online (Sandbox Code Playgroud)

这只是简写

fn.apply(this, [x, y, z])
Run Code Online (Sandbox Code Playgroud)

假设你有一个参数数组,你需要使用 apply()