覆盖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
引用了匿名函数的参数。