我写了一个函数的两个版本,它发送一个数组,然后是一个或多个参数。该函数从数组中删除与这些参数具有相同值的所有元素。两个版本之间的唯一区别是arguments
对象直接在一个对象中使用,间接在另一个对象中使用。
arguments
直接使用:
function destroyer(arr) {
var result = arr.filter(function(value) {
for (var i = 1; i < arguments.length; i++) {
if (arguments[i] == value) return;
}
return value;
});
return result;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3); // returns [1, 2, 3, 1, 2, 3]
间接使用 arguments
:
function destroyer(arr) {
var args = arguments;
var result = arr.filter(function(value) {
for (var i = 1; i < args.length; i++) {
if (args[i] == value) return;
}
return value;
});
return result;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3); // returns [1, 1]
为什么返回的数组有差异?