覆盖Javascript函数的参数对象

如果我有以下内容:

// Clean input. $.each(arguments, function(index, value) { arguments[index] = value.replace(/[\W\s]+/g, '').toLowerCase(); }); 

这会是一件坏事吗? 我没有进一步使用函数中未清理的参数,如果不创建一个无用的arguments副本只是为了使用它们会很好,但这样做有什么负面影响吗?

理想情况下我会这样做,但我猜这会遇到问题,因为arguments不是一个数组:

  arguments = $.map(arguments, function(value) { return value.replace(/[\W\s]+/g, '').toLowerCase(); }); 

感谢您的任何意见。

编辑:我刚刚意识到这两个现在都在他们自己的函数中,所以arguments对象已经改变了。 没有创建不必要的变量的任何方法吗?

我不会认为arguments[i] = value; 工作,因为相同的原因(它不是一个真正的数组)。

你真的应该考虑将清理后的值分配给一个新变量:

 var cleaned_args = $.map(arguments, function(value) { return value.replace(/[\W\s]+/g, '').toLowerCase(); }); 

在这里引入新变量不是必需的。 大多数情况下,你不会直接对arguments进行操作(因为它的缺点就像你已经发现的那样),但是首先将它转换为真正的数组(无论如何都会涉及一个新的变量)。

关于你的编辑:

是的,第一个不起作用,因为arguments引用了匿名函数的参数。