2017-08-10 84 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'類似的問題。 –