直接和间接使用arguments对象的区别?

时间:2016-08-19 03:43:48

标签: javascript filter arguments

我写了一个函数的两个版本,它发送一个数组,然后是一个或多个参数。该函数从数组中删除与这些参数具有相同值的所有元素。两个版本之间的唯一区别是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]

为什么返回的数组有差异?

0 个答案:

没有答案