我遇到了一些我無法完全理解的代碼。原理似乎足夠清晰,但我在forEach函數調用中聲明的第二個參數有一些困難。很明顯,匿名函數通過action參數傳遞給forEach,但是一旦進入for循環,究竟是如何工作的呢?如何將匿名函數作爲參數傳遞給內部使用?
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}
var numbers = [1, 2, 3, 4, 5], sum = 0;
forEach(numbers, function(number) {
sum += number;
});
console.log(sum); // 15
我覺得最讓我困惑的是,匿名函數的語法似乎並不兼容與action(array[i])
- 我的意思是,我明白sum
獲得反過來數組的每個值,但如果函數「替換」action
參數,(array[i])
部分如何以及在哪裏適合?
我很困惑你的困惑。 'forEach'函數接受兩個參數,第二個參數需要是一個函數的引用(任何函數 - 名字,匿名,不管)......你傳遞一個匿名函數。在'forEach'函數內部,它聲明瞭'action'參數...並且由於它**應該保存對函數的引用,並且可以調用函數,所以可以調用'action'。調用'action'會調用你傳遞的第二個參數。它使用一個參數('array [i]')調用它,它可以用作你傳遞的函數中的'number'參數 – Ian
@Ian - 謝謝。我知道自己有可能沒有正確地解釋自己,但你已經幫助清理了一些事情。我正在查看它,好像anon函數的整體被保存在動作變量中,而不是對它的引用。所以'(數組[i])'似乎會成功,而不是作爲它的參數。 – verism