如果其中一个参数被称为“参数”,我可以得到`arguments`对象吗?

时间:2011-12-21 22:38:35

标签: javascript

以下代码将打印1

(function (arguments) {
    console.log(arguments);
}(1, 2));

实际上,arguments对象已被覆盖。是否可以恢复函数范围内的默认arguments对象?

2 个答案:

答案 0 :(得分:3)

马特,在上面的评论中说,不是",我认为他可能是正确的;但你可以这样写:

(function f(arguments) {
    console.log(f.arguments);
}(1));

(至少在Firefox中;我还没有尝试过其他浏览器,但我相信这是标准行为)。但是,如果你因某些原因不愿意重命名你的功能,那么我猜你也可能不愿意给你的功能一个名字?

(NB以上仍然是一个函数表达式,而不是一个声明。你仍然无法在自己之外引用f。它仅仅是它不再是一个< em> anonymous 函数表达式。)

答案 1 :(得分:2)

实际上,考虑到它,你可以做到这一点!

(function (arguments) {
    (function () {
       console.log(arguments.callee.caller.arguments);
    })();
})(1, 2);

请参阅this fiddle