如何访问“参数”来自闭包的外部函数的文字对象
How to access the "arguments" literal object of an outer function from a closure?
我有一个闭包,并且从该闭包中,我需要访问定义闭包的函数的arguments
对象字量:
function outerFunction(){
var myClosure = function(){
// I need to access the "arguments" object of "outerFunction"
}
}
不将arguments
存储在变量中是可能的吗?
简短回答:只需使用变量。没有好的理由不。
是否可以不将参数存储在变量中?
你的选择是存储对arguments
对象本身的引用,或者使用变量(或参数)来引用其中的单个项目,但是你不能从内部函数中访问外部函数的arguments
对象本身,因为它自己的arguments
遮蔽了它。
在一种非常有限的情况下,您可以不执行上述任何一种操作:在调用outerFunction
期间(如果myClosure
在outerFuntion
返回后存活),您可以使用outerFunction.arguments
。我不认为这是文档中的行为(至少,我在规范中找不到),但它适用于Chrome, Firefox和IE11。例如:
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
:function outerFunction() {
var args = arguments;
var myClosure = function() {
snippet.log(JSON.stringify(args));
};
return myClosure;
}
var c = outerFunction(1, 2, 3);
c();
<!-- 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>
- 在underscorejs模板中使用闭包
- setTimeout可以与闭包内的函数一起使用吗
- 附加到原型属性的Do函数没有闭包
- 使用闭包/函数绑定将自函数作为回调传递
- 何时使用自包含函数(闭包),何时不使用自包含函数
- C#Asp.net自定义控件的Javascript闭包
- 如何在匿名自执行函数中为闭包添加属性
- 使用闭包和自调用函数制作计数器
- 自调用函数返回闭包.这是干什么用的?
- 我如何把所有这1200+行自定义javascript到一个闭包,所以没有全局变量
- JavaScript自调用函数闭包不能正常工作
- 自调用匿名函数闭包内变量的生命周期
- 在JavaScript闭包中使用自调用函数
- 如何正确地自执行闭包
- Javascript闭包和自执行的匿名函数
- 不完整的可执行自加载闭包
- 在生成过程中将代码包装在自定义闭包中
- 自执行匿名函数和闭包
- 自递归调用(可能,由于涉及闭包)
- 对JS闭包进行闭包