如何访问"参数"封闭外部函数的文字对象?

时间:2015-09-29 10:40:54

标签: javascript function closures

我有一个闭包,从那个闭包中,我需要访问定义闭包的函数的arguments对象文字:

function outerFunction(){

    var myClosure = function(){
        // I need to access the "arguments" object of "outerFunction"
    }

}

如果不将arguments存储在变量中,这是否可行?

1 个答案:

答案 0 :(得分:4)

简短回答:只需使用变量即可。没有充分的理由

  

这可以不在变量中存储参数吗?

您的选项要么存储对arguments对象本身的引用,要么使用变量(或参数)来引用它中的单个项目,但您无法访问arguments对象本身,来自你的内部函数,因为它自己的arguments会影响它。

在一个非常有限的情况下,您可以在不执行任何操作的情况下执行此操作:期间调用outerFunction(如果myClosure幸存,则不会更晚{ {1}}返回)您可以使用outerFuntion。我不认为记录了行为(至少,我无法在规范中找到它),但它适用于Chrome,Firefox和IE11。 E.g:



outerFunction.arguments

function outerFunction() {

  var myClosure = function(where) {
    snippet.log(where + " " + JSON.stringify(outerFunction.arguments));
  };

  myClosure("Inside");

  return myClosure;
}

var c = outerFunction(1, 2, 3);
c("Outside");




我看到没有理由这样做,而且我并不认为它实际上符合规范(我认为它的未指定行为有些代码可以回溯依赖等浏览器复制)。但是,如果在调用<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>期间执行此操作,它至少可以在某些引擎上运行。

你在评论中说过

  

我想直接调用它来自动执行任务

将变量分配给变量的确切原因是,它可以在内部函数中使用外部函数outerFunction

&#13;
&#13;
arguments
&#13;
function outerFunction() {
  var args = arguments;

  var myClosure = function() {
    snippet.log(JSON.stringify(args));
  };

  return myClosure;
}

var c = outerFunction(1, 2, 3);
c();
&#13;
&#13;
&#13;