指定变量值随时间变化的值无效

时间:2016-10-05 14:34:42

标签: javascript variables

 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的新手,非常好奇地探索它的每一点知识。

1 个答案:

答案 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);