f(arguments)与f.apply(this,arguments)之间的区别是什么?

时间:2014-04-23 20:09:03

标签: javascript decorator

我很久没学过JavaScript了,现在我试图实现Decorator模式:

function wrap(f, before, after){
        return function(){
            return before + f(arguments) + after;
        }
}

我想知道的是,如果我们将f(arguments)替换为f.apply(this,arguments),则输出没有明显差异。 您能否澄清一下哪个案例更可取?为什么?

UPD: 我想我已经明白了什么是瓶颈:) 如果我们用前面的代码装饰函数而没有参数,一切都会好的。但是如果我们有参数,我们就必须像arguments[0],arguments[1]那样列举它们。我是对的吗?

1 个答案:

答案 0 :(得分:2)

  1. f(arguments)只需调用f并将 Array 类对象(包含参数)传递给它,这是你想要的。

  2. f.call(this, arguments[0], arguments[1], ..)会要求您列出每个参数,它与f(arguments[0], arguments[1], ..)几乎相同,减去函数上下文。

  3. f.apply(this, arguments)会调用f并将arguments中的每个参数作为实际参数传递。

  4. 如果您正在尝试实现包装函数而不必考虑将哪些参数传递到f,那么方法#3就是您想要的。

    详细了解功能的方法: