2017-08-10 90 views
0

我能够使用.filter()和For循环完成任务,但不知道为什么我无法使用第二个示例中的格式。第一个例子工作正常。For循环中的Javascript筛选函数

function destroyer(arr) { 

for(i=1; i < arguments.length; i++){ 
    number = arguments[i]; 
    arr = arr.filter(function(num){ 
    return num !== number; 
    }); 
    } 
    return arr; 
} 

destroyer([1, 2, 3, 1, 2, 3], 2, 3); 

试图更换return num !== number;return num!==arguments[i]arguments[i]没有出现返回的数值。

+0

滤波器回调内部的'arguments'对象是* *该函数,并将从周围函数'arguments'对象不同。 – Pointy

+0

感谢您的反馈。 –

回答

3

因为arguments在此处引用了不同的函数参数。

每次输入函数时,arguments都会引用当前正在执行的函数参数arguments只能引用顶层函数参数没有多大意义。

实施例:

function a() { 
 
    console.log(arguments[0]); 
 
    var b = function() { 
 
    console.log(arguments[0]); 
 
    }; 
 
    b('This is b'); 
 
} 
 

 
a('This is a');

+0

我并没有从这个角度看它,在.Filter的第二个函数涉及的地方。现在有道理。谢谢。 –

+0

@BradCunningham当然可以!我记得第一个哈哈有一个与'arguments'类似的问题。 –