我有一个闭包,从那个闭包中,我需要访问定义闭包的函数的arguments
对象文字:
function outerFunction(){
var myClosure = function(){
// I need to access the "arguments" object of "outerFunction"
}
}
如果不将arguments
存储在变量中,这是否可行?
答案 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
:
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;