以下代码将打印1
:
(function (arguments) {
console.log(arguments);
}(1, 2));
实际上,arguments
对象已被覆盖。是否可以恢复函数范围内的默认arguments
对象?
答案 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。