Function.caller.arguments和Function.arguments有什么区别?

时间:2017-02-24 12:05:25

标签: javascript

我在函数foo.caller.arguments中使用arguments还是简单foo是否有区别:

function foo(){
    console.log(foo.caller.arguments);
}

function foo(){
    console.log(arguments);
}

2 个答案:

答案 0 :(得分:2)

arguments给出了函数本身的参数,而caller.arguments给出了调用这个函数的函数的参数。以下代码将为您提供基本的了解。

根据建议的MDN

,BTW function.callerNon-standard
var foo = function(name) {
  bar('second');
}

var bar = function(surname) {
  console.log(arguments);
  console.log(bar.caller.arguments)
}

foo('first');

答案 1 :(得分:2)

正如在问题的评论中所说,caller不是标准财产: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller

话虽如此,它返回对调用者的引用,即调用当前函数的函数。因此,caller.arguments可以获取调用调用者的参数。

arguments获取调用当前函数时使用的参数。

例如:

function one(c) {
    console.log('arguments', arguments);
    console.log('caller.arguments', one.caller.arguments);
}

function two(a, b) {
    one(3);
}

two(1, 2)

打印

arguments [3]
caller.arguments [1, 2]