function destroyer(arr) {
var arg = Array.prototype.slice.call(arguments);
arg.splice(0, 1);
return arr.filter(function (val){
return arg.indexOf(val) === -1;
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
此代码正常运行。但是如果用arg = arg.splice(0,1)替换arg.splice(0,1); ,代码不起作用。由于arg是一个变量,所以它的值可以在整个代码的过程中改变,为什么它不能像这样工作?请原谅我,如果这个问题看起来很傻,但我是javascript的新手,非常好奇地探索它的每一点知识。
答案 0 :(得分:0)
使用arg =
的代码不是正确的(尽管您可以更有效地执行此操作,更多信息如下)。 arg.splice(0, 1)
从原始数组中删除第一个元素(在适当的位置更改数组),并返回一个仅包含已删除元素的新数组。那就是:
var a = [1, 2, 3];
console.log(a.splice(0, 1)); // [1]
console.log(a); // [2, 3]

如果您使用arg = arg.splice(0, 1);
,则说“#34;从arg
中删除第一个元素,然后替换arg
变量' s值,引用只包含已删除元素的新数组。因此,您随后使用arg
将使用包含已删除条目的数组,而不是您要使用的数组。
你可以而且可能完全避免splice
。相反,只需在复制arguments
时跳过第一个参数:
function destroyer(arr) {
var arg = Array.prototype.slice.call(arguments, 1);
// Note --------------------------------------^^^
return arr.filter(function(val) {
return arg.indexOf(val) === -1;
});
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);